"""HTML library reference of CvPythonExtensions v2.00 (and lower)
by Wouter "Locutus" Snijders (locutus@apolyton.net) - 2005-08

Generates HTML documentation for the contents of CyPythonExtensions

Classes and methods with their return type and (if available) docstrings are
obtained from the Python definitions, their required arguments obtained directly
from the C++ source code.

The file started out as a very small, simple script developed in a day or two.
But as time progressed more and more additions were necessary, which were made
without much planning. Now, 8 months later, the code is very messy but it's
functional -- I'm not proud but have neither the time nor the willingness to
clean it up. If you want to use this on a mod or modified SDK, you should be
able to do so without modifications. If you want to modify this script for your
own purposes, feel free to do so, but I can only say two things: good luck, and
my sincere apologies!

Usage:
To start the script, type 'python genHTML.py' in the shell, or double-click it
in Windows Explorer (if .py files are associated with Python and not an editor).
Python 2.4 or higher must be installed and this file must (by default) be in the
root Civ4 folder. It will create a PythonAPI folder in which it will put the
HTML files. No updates.html is created, do this manually if you need one and
place it in the main PythonAPI folder.

There are a few settings that affect how the script functions just below."""

import re, sys, os, shutil

### settings ###

# set the version of the game you're running this code for; Original = 161, Warlords = 200 (Warlords has some non-SDK functions that aren't in the original)
iVersion = 317		#161
# dir where files will be created (can be absolute or relative); example: 'PythonAPI'
strDirName = 'PythonAPI'
# name of the 'tab' opened by default in the Type Frame. If you have no 'updates.html' file, change this to 'legend.html' or 'Types/Typelist.html'
strDefault = 'legend.html'
# path of a mod in case XML type info should be obtained from a mod folder (<noMod> = no mod); example: 'Mods/Desert War'
strModDirName = '<noMod>'
# path of the SDK files in case C++ files should be obtained from a modded SDK; example: 'CvGameCoreDLL'
strSdkDirName = 'CvGameCoreDLL'
# absolute path (should only be needed for specific purposes, like password-protected websites); example: http://user:pasw@apolyton.net/ (mind the closing slash)
strPath = ''
# if you don't want the script to copy the images from the z_API_files folder (because this is really only needed the first time this script is run), 
# set this to False. You can of course also leave out the z_API_files folder altogether manually move the images to the correct folder when needed
bCopyImages = True
# Set this to true if you'd like the API function names to include the classname. e.g. "CyInterface.DoSoundtrack(..." instead of "DoSoundtrack(..."
bFunctionsIncludeClass = False
# list of classes which are bolded (i.e. important ones, preferences may vary per user)
boldClasses =	[	'CyArea',
			'CyCity',
			'CyGame',
			'CyGlobalContext',
			'CyMap',
			'CyPlayer',
			'CyPlot',
			'CyPopup',
			'CySelectionGroup',
			'CyTeam',
			'CyUnit'
		]

### extra API comments ###

commentDict = {} # here you can add comments that should appear instead of the auto-doc (stopped using it, don't have the time to document everything)

### end extra comments ###

# use correct paths
if not strPath == '':
	strPrefix = strPath + strDirName + '/'
	strPrefix2 = strPath + strDirName + '/'
else:
	strPrefix = ''
	strPrefix2 = '../'

# in retrospect this would've been easier to generalise and to just parse everything, but the damage is done and I'm too lazy to chance it now: list of XML files to read and what types to look for
importTypeDic =	{	'FlavorTypes': 'GlobalTypes.xml',
			'ArtStyleTypes': 'GlobalTypes.xml',
			'CitySizeTypes': 'GlobalTypes.xml',
			'ContactTypes': 'GlobalTypes.xml',
			'DiplomacyPowerTypes': 'GlobalTypes.xml',
			'AutomateTypes': 'GlobalTypes.xml',
			'FootstepAudioTypes': 'GlobalTypes.xml',
			'DirectionTypes': 'GlobalTypes.xml',
			'AttitudeTypes': 'BasicInfos/CIV4AttitudeInfos.xml',
			'CalendarTypes': 'BasicInfos/CIV4CalendarInfos.xml',
			'CityTabTypes': 'BasicInfos/CIV4CityTabInfos.xml',
			'ConceptTypes': 'BasicInfos/CIV4BasicInfos.xml',
			'DenialTypes': 'BasicInfos/CIV4DenialInfos.xml',
			'DomainTypes': 'BasicInfos/CIV4DomainInfos.xml',
			'InvisibleTypes': 'BasicInfos/CIV4InvisibleInfos.xml',
			'MemoryTypes': 'BasicInfos/CIV4MemoryInfos.xml',
			'MonthTypes': 'BasicInfos/CIV4MonthInfos.xml',
			'NewConceptTypes': 'BasicInfos/CIV4NewConceptInfos.xml', # not in DLL
			'SeasonTypes': 'BasicInfos/CIV4SeasonInfos.xml',
			'UnitAITypes':  'BasicInfos/CIV4UnitAIInfos.xml',
			'UnitCombatTypes': 'BasicInfos/CIV4UnitCombatInfos.xml',
			'BuildingClassTypes': 'Buildings/CIV4BuildingClassInfos.xml',
			'BuildingTypes': 'Buildings/CIV4BuildingInfos.xml',
			'SpecialBuildingTypes': 'Buildings/CIV4SpecialBuildingInfos.xml',
			'CivilizationTypes': 'Civilizations/CIV4CivilizationInfos.xml',
			'LeaderHeadTypes': 'Civilizations/CIV4LeaderHeadInfos.xml',
			'TraitTypes': 'Civilizations/CIV4TraitInfos.xml',
			'UnitArtStyleTypes': 'Civilizations/CIV4UnitArtStyleTypeInfos.xml',
			'ColorTypes': 'Interface/CIV4ColorVals.xml',
			'AdvisorTypes': 'Interface/CIV4AdvisorInfos.xml',
			'InterfaceModeTypes': 'Interface/CIV4InterfaceModeInfos.xml',
			'PlayerColorTypes': 'Interface/CIV4PlayerColorInfos.xml',
			'CivicTypes': 'GameInfo/CIV4CivicInfos.xml',
			'CivicOptionTypes': 'GameInfo/CIV4CivicOptionInfos.xml',
			'ClimateTypes': 'GameInfo/CIV4ClimateInfo.xml',
			'CommerceTypes': 'GameInfo/CIV4CommerceInfo.xml',
			'CorporationTypes': 'GameInfo/CIV4CorporationInfo.xml',
			'CultureLevelTypes': 'GameInfo/CIV4CultureLevelInfo.xml',
			'CursorTypes': 'GameInfo/CIV4CursorInfo.xml',
			'DiploCommentTypes': 'GameInfo/CIV4DiplomacyInfos.xml',
			'EmphasizeTypes': 'GameInfo/CIV4EmphasizeInfo.xml',
			'EraTypes': 'GameInfo/CIV4EraInfos.xml',
			'EspionageMissionTypes': 'GameInfo/CIV4EspionageMissionInfo.xml',
			'GameOptionTypes': 'GameInfo/CIV4GameOptionInfos.xml',
			'GameSpeedTypes': 'GameInfo/CIV4GameSpeedInfo.xml',
			'GoodyTypes': 'GameInfo/CIV4GoodyInfo.xml',
			'HandicapTypes': 'GameInfo/CIV4HandicapInfo.xml',
			'HurryTypes': 'GameInfo/CIV4HurryInfo.xml',
			'MultiplayerOptionTypes': 'GameInfo/CIV4MPOptionInfos.xml',
			'PlayerOptionTypes': 'GameInfo/CIV4PlayerOptionInfos.xml',
			'ProcessTypes': 'GameInfo/CIV4ProcessInfo.xml',
			'ProjectTypes': 'GameInfo/CIV4ProjectInfo.xml',
			'ReligionTypes': 'GameInfo/CIV4ReligionInfo.xml',
			'SeaLevelTypes': 'GameInfo/CIV4SeaLevelInfo.xml',
			'SpecialistTypes': 'GameInfo/CIV4SpecialistInfos.xml',
			'TurnTimerTypes': 'GameInfo/CIV4TurnTimerInfo.xml',
			'UpkeepTypes': 'GameInfo/CIV4UpKeepInfo.xml',
			'VictoryTypes': 'GameInfo/CIV4VictoryInfo.xml',
			'VoteTypes': 'GameInfo/CIV4VoteInfo.xml',
			'VoteSourceTypes': 'GameInfo/CIV4VoteSourceInfos.xml',
			'WorldSizeTypes': 'GameInfo/CIV4WorldInfo.xml',
			'RouteTypes': 'Misc/CIV4RouteInfos.xml',
			'PythonCallTypes': 'Misc/CIV4PythonCallInfos.xml',
			'RiverTypes': 'Misc/CIV4RiverInfos.xml',
			'TechTypes': 'Technologies/CIV4TechInfos.xml',
			'BonusClassTypes': 'Terrain/CIV4BonusClassInfos.xml',
			'BonusTypes': 'Terrain/CIV4BonusInfos.xml',
			'FeatureTypes': 'Terrain/CIV4FeatureInfos.xml',
			'ImprovementTypes': 'Terrain/CIV4ImprovementInfos.xml',
			'TerrainTypes': 'Terrain/CIV4TerrainInfos.xml',
			'AnimationCategoryTypes': 'Units/CIV4AnimationInfos.xml',
			'EntityEventTypes': 'Units/CIV4AnimationInfos.xml',
			'AutomateTypes': 'Units/CIV4AutomateInfos.xml',
			'BuildTypes': 'Units/CIV4BuildInfos.xml',
			'CommandTypes': 'Units/CIV4CommandInfos.xml',
			'ControlTypes': 'Units/CIV4ControlInfos.xml',
			'MissionTypes': 'Units/CIV4MissionInfos.xml',
			'PromotionTypes': 'Units/CIV4PromotionInfos.xml',
			'SpecialUnitTypes': 'Units/CIV4SpecialUnitInfos.xml',
			'UnitClassTypes': 'Units/CIV4UnitClassInfos.xml',
			'UnitTypes': 'Units/CIV4UnitInfos.xml',
			'EventTypes': 'Events/CIV4EventInfos.xml',
			'EventTriggerTypes': 'Events/CIV4EventTriggerInfos.xml',
		}

# Entity Event type defs have moved in BTS.
if iVersion > 300:
	importTypeDic['EntityEventTypes'] = 'Units/Civ4EntityEventInfos.xml'

# initialise globals
classDict = {}		# class list (dictionary prevents doubles)
apiList = []		# all API info in final form
indexList = []		# list with index info (= API info with class and methods switched)
unknownTypesDict = {}	# unrecognised types (dictionary prevents doubles)
childDict = {}		# store list of children for each class
typeDict = {}		# store all types
apiDict = {}		# temporary storage of API info
atrDict = {}		# temporary storage for attribute info
conList = []		# temporary storage for constructor info
multiFileClassDict = {}	# temporary storage for classes spread over multiple files

# HTML code for header, footer, new class for API info files (bit messy but if it ain't brokens don't fix it)
strHeaderMainFile = """<html>
<head>
<title>Sid Meier's Civilization IV Python Class Reference</title>
<meta name="Author" content="Wouter Snijders, Apolyton CS">
<meta name="Keywords" content="Python, Civilization IV, Class Reference">
<meta name="Description" content="A list of all classes and methods in CvPythonExtensions">

<link rel=StyleSheet href="style.css" type="text/css">
</head>

<body class=grey>
"""

strHeaderTypeFrame = """<html>
<head>
<title>Sid Meier's Civilization IV Python Class Reference</title>
<meta name="Author" content="Wouter Snijders, Apolyton CS">
<meta name="Keywords" content="Python, Civilization IV, Class Reference">
<meta name="Description" content="A list of all classes and methods in CvPythonExtensions">

<link rel=StyleSheet href="../style.css" type="text/css">
</head>

<body class=grey>
"""

strHeaderClassFrame = strHeaderTypeFrame + """<table cellspacing=0 cellpadding=0><tr><td><a href="http://apolyton.net" target="_new"><img src="../acs_logo.gif"></img>&nbsp;</a></td><td align=center valign=top><i><span class=h2_sm>Sid Meier's Civilization IV</i></span><br><span class=h2>Python Class Reference</span><br><span class="italic_sm">Brought to you by <a href="http://apolyton.net" target="_new">Apolyton CS</a></span></tr></table>
<br>
"""

strHeaderList = """<a name="top"></a><table cellspacing=0 cellpadding=0><tr><td><a href="http://apolyton.net" target="_new"><img src="acs_logo.gif"></img>&nbsp;</a></td><td align=center valign=top><i><span class=h2_sm>Sid Meier\'s Civilization IV</i></span><br><span class=h2>Python Class Reference</span><br><span class="italic_sm">Brought to you by <a href="http://apolyton.net" target="_new">Apolyton CS</a></span></tr></table>
<br>
"""

strListAllClasses = """<a class=cf href="%sClassFrames/ClassFrame_%s.html">Class Tree</a> - Index<br>
All Classes - <a class=cf target="_top" href="%sindex4.html">Seperate Classes</a><br>
<br>
<a href="#A">A</a> <a href="#B">B</a> <a href="#C">C</a> <a href="#D">D-F</a> <a href="#G">G</a> <a class=index href="#getD">getD</a> <a class=index href="#getI">getI</a> <a class=index href="#getP">getP</a> <a class=index href="#getT">getT</a> <a href="#H">H</a> <a href="#I">I</a> <a href="#J">J-N</a> <a href="#O">O-R</a> <a href="#S">S</a> <a href="#T">T-Z</a><br>
<br>
"""

strListSepClasses = """<a class=cf href="%sClassFrames/ClassFrame2_%s.html">Class Tree</a> - Index<br>
<a class=cf target="_top" href="%sindex3.html">All Classes</a> - Seperate Classes<br>
<br>
<a href="#A">A</a> <a href="#B">B</a> <a href="#C">C</a> <a href="#D">D-F</a> <a href="#G">G</a> <a class=index href="#getD">getD</a> <a class=index href="#getI">getI</a> <a class=index href="#getP">getP</a> <a class=index href="#getT">getT</a> <a href="#H">H</a> <a href="#I">I</a> <a href="#J">J-N</a> <a href="#O">O-R</a> <a href="#S">S</a> <a href="#T">T-Z</a><br>
<br>
"""

strSepClass = strHeaderTypeFrame + """<a name="%s"></a><span class=h1>%s</span>%s<br>
"""

strAllClasses = """Class Tree - <a class=cf href="%slist.html">Index</a><br>
All Classes - <a class=cf target="_top" href="%sindex2.html">Seperate Classes</a><br>
"""

strSepClasses = """Class Tree - <a class=cf href="%slist2.html">Index</a><br>
<a class=cf target="_top" href="%sindex.html">All Classes</a> - Seperate Classes<br>
"""

strExpandCollapse = """<a class=cf href="%sClassFrame%s_%s.html">Expand All</a> - <a class=cf href="%sClassFrame%s_%s.html">Collapse All</a><br>
<br>
"""

strExpand = """Expand All - <a class=cf href="%sClassFrame%s_%s.html">Collapse All</a><br>
<br>
"""

strCollapse = """<a class=cf href="%sClassFrame%s_%s.html">Expand All</a> - Collapse All<br>
<br>
"""

strFooterEnd = """<br>
<center><span class=footer>Sid Meier's Civilization IV &copy; Take-Two Interactive; Created by Wouter "Locutus" Snijders &copy; 2005, 2006</span></center>
</body>
</html>"""

strFooter = """</ul>""" + strFooterEnd

strFooter2 = """</ol>""" + strFooterEnd

strFooterShort = """<br>
<center><span class=footer>Sid Meier's Civilization IV &copy; Take-Two Interactive<br>Created by Wouter "Locutus" Snijders &copy; 2005, 2006</span></center>
</body>
</html>"""

strFooterType = strFooterShort

strFirstClass = """<a name="%s"></a><span class=h1>%s</span>%s<br>
"""

strNewClass = """</ol>
<br>
<br>
<a name="%s"></a><span class=h1>%s</span>%s<br>
"""

# index.html
strIndex = """<html>
<head>
<title>Sid Meier's Civilization IV Python Class Reference</title>
<meta name="Author" content="Wouter Snijders">
<meta name="Keywords" content="Python, Civilization IV, Class Reference">
<meta name="Description" content="A list of all classes and methods in CvPythonExtensions">
</head>
<frameset cols="337, *">
  <frameset rows="60%%, 40%%">
      <frame name="classFrame" src="%s">
      <frame name="typeFrame" src="%s%s">
  </frameset>
  <frame name="mainFrame" src="%s">
  <noframes>
      This document requires a browser with frames support.
  </noframes>
</frameset>
</html>"""

# legend.html
strLegend = """<html>
<head>
<link rel=StyleSheet href="style.css" type="text/css">
</head>
<body class=grey>Legend - <a class=tf href="%sTypes/TypeList.html">Type List</a> - <a class=tf href="%supdates.html">Updates</a><br>
<br>
Types:<br>
<span class=void>VOID</span>: always returns <span class=void>None</span><br>
<span class=int>INT</span>: integer value; e.g. <span class=int>3</span><br>
<span class=type>SomeType</span>: index of some type (click to view); e.g. <span class=type>UnitType</span><br>
<span class=long>LONG</span>: long value (large integer); e.g. <span class=long>25245432562</span><br>
<span class=float>FLOAT</span>: float value (non-integer); e.g. <span class=float>23.45</span><br>
<span class=bool>BOOL</span>: boolean value; <span class=bool>True</span> or <span class=bool>False</span><br>
<span class=string>STRING</span>: string value (text); e.g. <span class=string>"unladen swallow"</span><br>
<span class=tuple>TUPLE</span>: tuple value; e.g. <span class=tuple>(12, 16)</span> or <span class=tuple>("velocity", 23, True)</span><br>
<span class=list>LIST</span>: list value; e.g. <span class=list>["spam", "bacon", "eggs", "spam"]</span><br>
<span class=class>CvClass</span>: class object (click to go to class); e.g. <span class=class>CyUnit</span> or <span class=class>CvBuildingInfo</span><br>
<span class=unknown>Unknown</span>: unknown type; something Python does not recognize (do not use)<br>
</body>
</html>"""

# stylesheet
strStyleSheet = """/* Body text */

BODY {
	background: white;
	font-family: Verdana;
	font-size: 12px;
	color: black;
}

BODY.grey {
	background: #eeeeee;
}

SPAN {
	font-family: Verdana;
	font-size: 13px;
	font-weight: bold;
	color: black;
}

SPAN.italic {
	font-style: italic;
	font-weight: normal;
	font-size: 12px;
}

SPAN.italic_sm {
	font-style: italic;
	font-weight: normal;
	font-size: 11px;
}

SPAN.sm {
	font-weight: normal;
	font-size: 11px;
}

SPAN.tree {
	font-weight: normal;
	line-height: 1
}

SPAN.int {
	color: red;
}

SPAN.void {
	color: blue;
}

SPAN.type {
	color: maroon;
}

SPAN.float {
	color: olive;
}

SPAN.long {
	color: teal;
}

SPAN.bool {
	color: orange;
}

SPAN.string {
	color: magenta;
}

SPAN.tuple {
	color: navy;
}

SPAN.list {
	color: purple;
}

SPAN.class {
	color: green;
}

SPAN.unknown {
	color: lime;
}

SPAN.code {
	font-family: Courier;
	font-size: 12px;
	font-weight: normal;
}

SPAN.h1 {
	font-size: 20px;
	font-weight: bold;
	color: green;
}

SPAN.h2 {
	font-size: 16px;
	font-weight: bold;
	color: black;
}

SPAN.h2_sm {
	font-size: 16px;
	font-weight: normal;
	color: black;
}

SPAN.footer {
	font-size: 10px;
	font-style: italic;
	font-weight: normal;
	color: gray;
}

/* Links */

A { 
	text-decoration: none;
	color: green;
}

A.type { 
	text-decoration: none;
	color: maroon;
}

A.index { 
	font-size: 11px;
	text-decoration: none;
	color: green;
}

A.black { 
	text-decoration: none;
	color: black;
}

A.cf { 
	text-decoration: none;
	color: green;
}

A.tf { 
	text-decoration: none;
	color: maroon;
}

A IMG {
	text-decoration: none;
	color: #eeeeee;
	border: 0px;
}"""

# hardcode these types
typeDict['TradeableItems.'] = 'TradeableItems.'
typeDict['InterfaceVisibility.'] = 'InterfaceVisibility.'

# add hardcoded classes (from pydoc)
classDict['CyAudioGame'] = ('CyAudioGame', [])
classDict['CyCamera'] = ('CyCamera', [])
classDict['CyDiplomacy'] = ('CyDiplomacy', [])
classDict['CyEngine'] = ('CyEngine', [])
classDict['CyFractal'] = ('CyFractal', [])
classDict['CyGFlyoutMenu'] = ('CyGFlyoutMenu', [])
classDict['CyGInterfaceScreen'] = ('CyGInterfaceScreen', [])
classDict['CyGTabCtrl'] = ('CyGTabCtrl', [])
classDict['CyGlobeLayer'] = ('CyGlobeLayer', [])
classDict['CyGlobeLayerManager'] = ('CyGlobeLayerManager', [])
classDict['CyInterface'] = ('CyInterface', [])
classDict['CyMessageControl'] = ('CyMessageControl', [])
#classDict['CyPitboss'] = ('CyPitboss', [])
classDict['CyPopup'] = ('CyPopup', [])
classDict['CyPopupInfo'] = ('CyPopupInfo', [])
classDict['CyPopupReturn'] = ('CyPopupReturn', [])
classDict['CyPythonMgr'] = ('CyPythonMgr', [])
classDict['CySign'] = ('CySign', [])
classDict['CyStatistics'] = ('CyStatistics', [])
classDict['CyTranslator'] = ('CyTranslator', [])
classDict['CyUnitEntity'] = ('CyUnitEntity', [])
classDict['CyUnitSubEntity'] = ('CyUnitSubEntity', [])
classDict['CyUserProfile'] = ('CyUserProfile', [])
classDict['CyVariableSystem'] = ('CyVariableSystem', [])
classDict['NiMatrix3'] = ('NiMatrix3', [])

# hardcoded classes which are only in original Civ4 and Warlords
if iVersion < 300:
	classDict['CyInterfaceScreen'] = ('CyInterfaceScreen', [])

# add hardcoded classes (BTS, and not Python)
if iVersion >= 300:
	classDict['CvDiplomacyResponse'] = ('CvDiplomacyResponse', [])
	classDict['Response'] = ('Response', [])
	classDict['WidgetAnim'] = ('WidgetAnim', [])

# hardcode these class members (from pydoc) -- in retrospect some form of automation would've been better but hindsight is 20/20
apiList.append('CyAudioGame...nonSDK')
apiList.append('CyAudioGame.Destroy2DSound(int soundhandle):=void; void (int soundhandle) - Stop playing and destroy sound using soundhandle.')
apiList.append('CyAudioGame.Destroy3DSound(int soundhandle):=void; void (int soundhandle) - Stop playing and destroy sound using soundhandle.')
apiList.append('CyAudioGame.Is2DSoundPlaying(int soundhandle):=bool; bool (int soundhandle) - Is the sound using this soundhandle and scriptname playing?.')
apiList.append('CyAudioGame.Is3DSoundPlaying(int soundhandle):=bool; bool (int soundhandle) - Is the sound using this soundhandle and scriptname playing?.')
apiList.append('CyAudioGame.Play2DSound(TCHAR* scriptname):=int; int (TCHAR* scriptname) - Play 2d sound using scriptname and return a handle to the sound.')
apiList.append('CyAudioGame.Play2DSoundWithId(int scriptId):=int;  int (int scriptId) - Play 2d sound using scriptId and return a handle to the sound.')
apiList.append('CyAudioGame.Play3DSound(TCHAR* scriptname, float x, float y, float z):=int; int (TCHAR* scriptname, float x, float y, float z) - Play 3d sound using scriptname at position (x,y,z) and return a handle to the sound.')
apiList.append('CyAudioGame.Play3DSoundWithId(int scriptId, float x, float y, float z):=int;  int (int scriptId, float x, float y, float z) - Play 3d sound using scriptId at position (x,y,z) and return a handle to the sound.')
apiList.append('CyAudioGame.Set2DSoundVolume(int soundhandle, float volume):=void; void (int soundhandle, float volume) - Set volume to value between 0.0f and 1.0f to sound using soundhandle.')
apiList.append('CyAudioGame.Set3DSoundPosition(int soundhandle, float x, float y, float z):=void; void (int soundhandle, float x, float y, float z) - Set position of sound using soundhandle to (x,y,z).')
apiList.append('CyAudioGame.Set3DSoundVolume(int soundhandle, float volume):=void; void (int soundhandle, float volume) - Set volume to value between 0.0f and 1.0f to sound using soundhandle.')
apiList.append('CyCamera...nonSDK')
apiList.append('CyCamera.GetBasePitch():=float; float ()')
apiList.append('CyCamera.GetBaseTurn():=float; float ()')
apiList.append('CyCamera.GetCameraMovementSpeed():=float; float ()')
apiList.append('CyCamera.GetCurrentPosition():=NiPoint3; NiPoint3 ()')
apiList.append('CyCamera.GetDefaultViewPortCenter():=NiPoint2; NiPoint2 CyCamera().GetDefaultViewPortCenter()')
apiList.append('CyCamera.GetDestinationPosition():=NiPoint3; NiPoint3 ()')
apiList.append('CyCamera.GetLookAt(NiPoint3 pt3LookAt):=void; void (NiPoint3 pt3LookAt)')
apiList.append('CyCamera.GetLookAtSpeed():=float; float ()')
apiList.append('CyCamera.GetTargetDestination():=NiPoint3; NiPoint3 ()')
apiList.append('CyCamera.GetZoom():=float; float ()')
apiList.append('CyCamera.JustLookAt(NiPoint3 p3LookAt):=void; void (CyPlot().getPoint()) - centers on plot')
apiList.append('CyCamera.JustLookAtPlot(CyPlot pPlot):=void; void (CyPlot* pPlot) - centers on plot')
apiList.append('CyCamera.LookAt(NiPoint3 pt3LookAt, CameraLookAtTypes type, NiPoint3 attackDirection):=void; void (NiPoint3 pt3LookAt, CameraLookAtTypes type, NiPoint3 attackDirection) - centers the camera on the point')
apiList.append('CyCamera.LookAtUnit(CyUnit unit):=void; void (CyUnit) - follow a unit')
apiList.append('CyCamera.MoveBaseTurnLeft(float increment):=void; void (float increment)')
apiList.append('CyCamera.MoveBaseTurnRight(float increment):=void; void (float increment)')
apiList.append('CyCamera.ReleaseLockedCamera():=void; void ()')
apiList.append('CyCamera.ResetZoom():=void; void ()')
apiList.append('CyCamera.SetBasePitch(float fBasePitch):=void; void (float fBasePitch)')
apiList.append('CyCamera.SetBaseTurn(float baseTurn):=void; void (float baseTurn)')
apiList.append('CyCamera.SetCameraMovementSpeed(CameraMovementSpeeds eSpeed):=void; void (int (CameraMovementSpeeds) eSpeed)')
apiList.append('CyCamera.SetCurrentPosition(NiPoint3 point):=void; void (NiPoint3 point)')
apiList.append('CyCamera.SetDestinationPosition(NiPoint3 point):=void; void (NiPoint3 point)')
apiList.append('CyCamera.SetLookAtSpeed(float fSpeed):=void; void (float fSpeed)')
apiList.append('CyCamera.SetTargetDestination(NiPoint3 point):=void; void (NiPoint3 point)')
apiList.append('CyCamera.SetViewPortCenter(NiPoint2 pt2Center):=void; void (NiPoint2 pt2Center)')
apiList.append('CyCamera.SetZoom(float zoom):=void; void (float zoom=0.5)')
apiList.append('CyCamera.SimpleLookAt(NiPoint3& position, NiPoint3& target):=void; void (NiPoint3 &position, NiPoint3 &target) - moves the camera to position looking at target')
apiList.append('CyCamera.Translate(NiPoint3 translation):=void; void (NiPoint3 translation=(fX, fY, fZ)')
apiList.append('CyCamera.ZoomIn(float increment):=void; void (float increment=0.5)')
apiList.append('CyCamera.ZoomOut(float increment):=void; void (float increment)')
apiList.append('CyCamera.isMoving():=bool; bool ()')
apiList.append('CyCamera.setOrthoCamera(bool bNewValue):=void; void (bool bNewValue)')
apiList.append('CyDiplomacy...nonSDK')
apiList.append('CyDiplomacy.addUserComment(DiploCommentTypes eComment, int iData1, int iData2, std::string szString, python::tuple txtArgs):=void; void ( int /*DiploCommentTypes*/ eComment, int iData1, int iData2, string szString, tuple txtArgs )')
apiList.append('CyDiplomacy.atWar():=bool; bool ()')
apiList.append('CyDiplomacy.clearUserComments():=void; void ()')
apiList.append('CyDiplomacy.closeScreen():=void; void ()')
apiList.append('CyDiplomacy.counterPropose():=bool; bool ()')
apiList.append('CyDiplomacy.declareWar():=void; void ()')
apiList.append('CyDiplomacy.diploEvent(DiploEventTypes iDiploEvent, int iData1, int iData2):=void; void (int /*DiploEventTypes*/ iDiploEvent, int iData1, int iData2)')
apiList.append('CyDiplomacy.endTrade():=void; void ()')
apiList.append('CyDiplomacy.getData():=int; int ()')
apiList.append('CyDiplomacy.getOpponentCivName():=std::wstring; wstring ()')
apiList.append('CyDiplomacy.getOpponentName():=std::wstring; wstring ()')
apiList.append('CyDiplomacy.getOurCivName():=std::wstring; wstring ()')
apiList.append('CyDiplomacy.getOurName():=std::wstring; wstring ()')
apiList.append('CyDiplomacy.getOurScore():=int; int ()')
apiList.append('CyDiplomacy.getPlayerTradeOffer(int iIndex):=TradeData; TradeData* (int iIndex)')
apiList.append('CyDiplomacy.getTheirScore():=int; int ()')
apiList.append('CyDiplomacy.getTheirTradeOffer(int iIndex):=TradeData; TradeData* (int iIndex)')
apiList.append('CyDiplomacy.getWhoTradingWith():=PlayerTypes; int PlayerTypes*/ getWhoTradingWith()')
apiList.append('CyDiplomacy.hasAnnualDeal():=bool; bool ()')
apiList.append('CyDiplomacy.implementDeal():=void; void ()')
apiList.append('CyDiplomacy.isAIOffer():=bool; bool ()')
apiList.append('CyDiplomacy.isSeparateTeams():=bool; bool ()')
apiList.append('CyDiplomacy.makePeace():=void; void ()')
apiList.append('CyDiplomacy.offerDeal():=bool; bool ()')
apiList.append('CyDiplomacy.ourOfferEmpty():=bool; bool ()')
apiList.append('CyDiplomacy.performHeadAction(LeaderheadAction eAction):=void; void ( LeaderheadAction eAction )')
apiList.append('CyDiplomacy.setAIComment(int iComment):=void; void (int iComment)')
apiList.append('CyDiplomacy.setAIOffer(bool bOffer):=void; void ( bool bOffer )')
apiList.append('CyDiplomacy.setAIString(std::string szString, python::tuple txtArgs):=void; void ( string szString, tuple txtArgs )')
apiList.append('CyDiplomacy.showAllTrade(bool bShow):=void; void ( bool bShow )')
apiList.append('CyDiplomacy.startTrade(int iComment, bool bRenegotiate):=void; void ( int iComment, bool bRenegotiate )')
apiList.append('CyDiplomacy.theirOfferEmpty():=bool; bool ()')
apiList.append('CyEngine...nonSDK')
apiList.append('CyEngine.addColoredPlot(int plotX, int plotY, const NiColorA& color, int iLayer):=void; void (int plotX, int plotY, NiColorA color, int iLayer)')
apiList.append('CyEngine.addColoredPlotAlt(int plotX, int plotY, int iPlotStyle, int iLayer, std::string szColor, float fAlpha):=void; void (int plotX, int plotY, int iPlotStyle, int iLayer, string szColor, float fAlpha)')
apiList.append('CyEngine.addLandmark(CyPlot* pPlot, TCHAR* caption):=void; void (CyPlot* pPlot, const TCHAR* caption)')
apiList.append('CyEngine.addLandmarkPopup(CyPlot* pPlot):=void; void (CyPlot* pPlot)')
apiList.append('CyEngine.addSign(CyPlot *plot, PlayerTypes playerType, TCHAR* caption):=void; void (CyPlot *plot, int /* PlayerTypes */ playerType, const TCHAR* caption)')
apiList.append('CyEngine.clearColoredPlots(int iLayer):=void; void (int iLayer)')
apiList.append('CyEngine.getCityBillboardVisibility():=bool; bool ()')
apiList.append('CyEngine.getNumSigns():=int; int getNumSigns()')
apiList.append('CyEngine.getSelectionCursorVisibility():=bool; bool ()')
apiList.append('CyEngine.getSignByIndex(int index):=CySign; CySign* (int index)')
apiList.append('CyEngine.getUnitFlagVisibility():=bool; bool ()')
apiList.append('CyEngine.getUpdateRate():=float; float ()')
apiList.append('CyEngine.isDirty(EngineDirtyBits eBit):=bool; bool (EngineDirtyBits eBit)')
apiList.append('CyEngine.isGlobeviewUp():=bool; bool ()')
apiList.append('CyEngine.isNone():=bool; bool () - is the engine instance valid?')
apiList.append('CyEngine.reloadEffectInfos():=void; void ()')
apiList.append('CyEngine.removeLandmark(CyPlot* pPlot):=void; void (CyPlot* pPlot)')
apiList.append('CyEngine.removeSign(CyPlot* pPlot, PlayerTypes playerType):=void; void (CyPlot* pPlot, int /* PlayerTypes */ playerType)')
apiList.append('CyEngine.setCityBillboardVisibility(bool bState):=void; void (bool bState)')
apiList.append('CyEngine.setDirty(EngineDirtyBits eBit, bool bNewValue):=void; void (EngineDirtyBits eBit, bool bNewValue)')
apiList.append('CyEngine.setFogOfWar(bool bState):=void; void (bool bState)')
apiList.append('CyEngine.setSelectionCursorVisibility(bool bState):=void; void (bool bState)')
apiList.append('CyEngine.setUnitFlagVisibility(bool bState):=void; void (bool bState)')
apiList.append('CyEngine.setUpdateRate(float fUpdateRate):=void; void (float fUpdateRate)')
apiList.append('CyEngine.toggleGlobeview():=void; void ()')
apiList.append('CyEngine.triggerEffect(int iEffect, NiPoint3 plotPoint):=void; void (iEffect, plotPoint)')
apiList.append('CyFractal...nonSDK')
apiList.append('CyFractal.fracInit(int iNewXs, int iNewYs, int iGrain, CvRandom random, int iFlags, int iFracXExp, int iFracYExp)):=void; void (int iNewXs, int iNewYs, int iGrain, CvRandom random, int iFlags, int iFracXExp, int iFracYExp)')
apiList.append('CyFractal.fracInitHints(int iNewXs, int iNewYs, int iGrain, CvRandom random, int iFlags, CyFractal pRifts, int iFracXExp, int iFracYExp):=void; void (int iNewXs, int iNewYs, int iGrain, CvRandom random, int iFlags, CyFractal pRifts, int iFracXExp, int iFracYExp)')
apiList.append('CyFractal.fracInitRifts(int iNewXs, int iNewYs, int iGrain, CvRandom random, int iFlags, boost::python::list hintsData, int iFracXExp, int iFracYExp):=void; void (int iNewXs, int iNewYs, int iGrain, CvRandom random, int iFlags, list hintsData, int iFracXExp, int iFracYExp)')
apiList.append('CyFractal.getHeight(int x, int y):=int; int (int x, int y)')
apiList.append('CyFractal.getHeightFromPercent(int iPercent):=int; int (int iPercent)')
apiList.append('CyGFlyoutMenu...nonSDK')
apiList.append('CyGFlyoutMenu.addTextItem(std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn):=void; void addTextItem(std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn)')
apiList.append('CyGFlyoutMenu.create():=void; void create()')
apiList.append('CyGFlyoutMenu.destroy():=void; void destroy()')
apiList.append('CyGFlyoutMenu.hide():=void; void hide()')
apiList.append('CyGFlyoutMenu.show():=void; void show()')
apiList.append('CyGInterfaceScreen...nonSDK')
apiList.append('CyGInterfaceScreen.addBonusGraphicGFC(std::string szName, int iBonus, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void ( string szName, int iBonus, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
apiList.append('CyGInterfaceScreen.addBuildingGraphicGFC(std::string szName, int iBuilding, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void ( string szName, int iBuilding, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
apiList.append('CyGInterfaceScreen.addCheckBoxGFC(std::string szName, std::string szTexture, std::string szHiliteTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle):=void; void ( string szName, string szTexture, string szHiliteTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle )')
apiList.append('CyGInterfaceScreen.addDDSGFC(std::string szName, std::string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addDDSGFCAt(std::string szName, std::string szAttachTo, std::string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption):=void; void ( string szName, string szAttachTo, string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption )')
apiList.append('CyGInterfaceScreen.addDrawControl(std::string szName, std::string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addDrawControlAt(std::string szName, std::string szAttachTo, std::string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addDropDownBoxGFC(std::string szName, int iX, int iY, int iWidth, WidgetTypes eWidgetType, int iData1, int iData2, FontTypes eFontType):=void; void ( string szName, int iX, int iY, int iWidth, WidgetTypes eWidgetType, int iData1, int iData2, FontTypes eFontType )')
apiList.append('CyGInterfaceScreen.addEditBoxGFC(std::string szName, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, FontTypes eFont):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, FontTypes eFont )')
apiList.append('CyGInterfaceScreen.addGraphData(std::string szName, float fX, float fY, uint uiLayer):=void; void ( string szName, float fX, float fY, uint uiLayer)')
apiList.append('CyGInterfaceScreen.addGraphLayer(std::string szName, uint uiLayer, int iColor):=void; void ( string szName, uint uiLayer, int iColor)')
apiList.append('CyGInterfaceScreen.addGraphWidget(std::string szName, std::string szAttachTo, std::string szFile, float fX, float fY, float fZ, float fWidth, float fHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, string szFile, float fX, float fY, float fZ, float fWidth, float fHeight, WidgetTypes eWidgetType, int iData1, int iData2)')
apiList.append('CyGInterfaceScreen.addImprovementGraphicGFC(std::string szName, int iImprovement, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void ( string szName, int iImprovement, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
apiList.append('CyGInterfaceScreen.addItemToTableGFC(std::string szAttachTo, std::wstring szText, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szAttachTo, wstring szText, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addLeaderheadGFC(std::string  szName, int eWho, int eInitAttitude, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidget, int iData1, int iData2):=void; void ( string  szName, int eWho, int eInitAttitude, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidget, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addLineGFC(std::string szDrawCtrlName, std::string szName, int iStartX, int iStartY, int iEndX, int iEndY, int eColor):=void; void ( string szDrawCtrlName, string szName, int iStartX, int iStartY, int iEndX, int iEndY, int eColor )')
apiList.append('CyGInterfaceScreen.addListBoxGFC(std::string szName, std::wstring helpText, int iX, int iY, int iWidth, int iHeight, TableStyles eStyle):=void; void ( string szName, wstring helpText, int iX, int iY, int iWidth, int iHeight, TableStyles eStyle )')
apiList.append('CyGInterfaceScreen.addMultiListControlGFC(std::string szName, std::wstring helpText, int iX, int iY, int iWidth, int iHeight, int numLists, int defaultWidth, int defaultHeight, TableStyles eStyle):=void; void ( string szName, wstring helpText, int iX, int iY, int iWidth, int iHeight, int numLists, int defaultWidth, int defaultHeight, TableStyles eStyle )')
apiList.append('CyGInterfaceScreen.addMultiListControlGFCAt(std::string szName, std::wstring helpText, int iX, int iY, int iWidth, int iHeight, int numLists, int defaultWidth, int defaultHeight, TableStyles eStyle):=void; void ( string szName, wstring helpText, int iX, int iY, int iWidth, int iHeight, int numLists, int defaultWidth, int defaultHeight, TableStyles eStyle )')
apiList.append('CyGInterfaceScreen.addMultilineText(std::string szName, std::wstring szText, int iX, int iY, int iWidth, int iHeight, WidgetTypes eType, int iData1, int iData2, int iJustify):=void; void ( string szName, wstring szText, int iX, int iY, int iWidth, int iHeight, WidgetTypes eType, int iData1, int iData2, int iJustify )')
apiList.append('CyGInterfaceScreen.addPanel(std::string szName, std::wstring title, std::wstring helpText, bool bVerticalLayout, bool bScrollable, int iX, int iY, int iWidth, int iHeight, PanelStyles eStyle):=void; void ( string szName, wstring title, wstring helpText, bool bVerticalLayout, bool bScrollable, int iX, int iY, int iWidth, int iHeight, PanelStyles eStyle )')
apiList.append('CyGInterfaceScreen.addPlotGraphicGFC(std::string szName, int iX, int iY, int iWidth, int iHeight, CyPlot *pPlot, int iDistance, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight, CyPlot *pPlot, int iDistance, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2)')
apiList.append('CyGInterfaceScreen.addReligionMovieWidgetGFC(std::string szName, std::string szFile, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szFile, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addScrollPanel(std::string szName, std::wstring title, int iX, int iY, int iWidth, int iHeight, PanelStyles eStyle):=void; void ( string szName, wstring title, int iX, int iY, int iWidth, int iHeight, PanelStyles eStyle )')
apiList.append('CyGInterfaceScreen.addSimpleTableControlGFC(std::string szName, int iX, int iY, int iWidth, int iHeight, TableStyles eStyle):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight, TableStyles eStyle )')
apiList.append('CyGInterfaceScreen.addSlider(std::string szName, int iX, int iY, int iWidth, int iHeight, int iDefault, int iMin, int iMax, WidgetTypes eWidgetType, int iData1, int iData2, bool bIsVertical=false):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight, int iDefault, int iMin, int iMax, WidgetTypes eWidgetType, int iData1, int iData2, bool bIsVertical=false )')
apiList.append('CyGInterfaceScreen.addStackedBarGFC(std::string szName, int iX, int iY, int iWidth, int iHeight, int iNumBars, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight, int iNumBars, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addTableControlGFC(std::string szName, int numColumns, int iX, int iY, int iWidth, int iHeight, bool bIncludeHeaders, bool bDrawGrid, int iconWidth, int iconHeight, TableStyles style):=void; void ( string szName, int numColumns, int iX, int iY, int iWidth, int iHeight, bool bIncludeHeaders, bool bDrawGrid, int iconWidth, int iconHeight, TableStyles style )')
apiList.append('CyGInterfaceScreen.addTableHeaderGFC(std::string szAttachTo, std::wstring szText, int iCol, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szAttachTo, wstring szText, int iCol, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.addUnitGraphicGFC(std::string szName, int iUnit, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void ( string szName, int iUnit, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground )')
apiList.append('CyGInterfaceScreen.appendListBoxString(std::string szAttachTo, std::wstring item, WidgetTypes eType, int iData1, int iData2, int iJustify):=void; void ( string szAttachTo, wstring item, WidgetTypes eType, int iData1, int iData2, int iJustify )')
apiList.append('CyGInterfaceScreen.appendMultiListButton(std::string szAttachTo, std::string szTexture, int listId, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption):=void; void ( string szAttachTo, string szTexture, int listId, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption )')
apiList.append('CyGInterfaceScreen.appendTableRow(std::string szName):=int; int ( string szName )')
apiList.append('CyGInterfaceScreen.attachButtonGFC(std::string szAttachTo, std::string szName, std::wstring szText, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szAttachTo, string szName, wstring szText, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.attachCheckBoxGFC(std::string szAttachTo, std::string szName, std::string szTexture, std::string szHiliteTexture, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle):=void; void (string szAttachTo, string szName, string szTexture, string szHiliteTexture, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle )')
apiList.append('CyGInterfaceScreen.attachControlToTableCell(std::string szControlName, std::string szTableName, int iRow, int iColumn):=void; void ( string szControlName, string szTableName, int iRow, int iColumn )')
apiList.append('CyGInterfaceScreen.attachDropDownBoxGFC(std::string szAttachTo, std::string szName, bool bExpand):=void; void ( string szAttachTo, string szName, bool bExpand )')
apiList.append('CyGInterfaceScreen.attachImageButton(std::string szAttachTo, std::string szName, std::string szTexture, GenericButtonSizes eSize, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption):=void; void ( string szAttachTo, string szName, string szTexture, GenericButtonSizes eSize, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption )')
apiList.append('CyGInterfaceScreen.attachLabel(std::string szAttachTo, std::string szName, std::wstring szText):=void; void (string szAttachTo, string szName, wstring szText)')
apiList.append('CyGInterfaceScreen.attachListBoxGFC(std::string szAttachTo, std::string szName, std::wstring helpText, TableStyles eStyle):=void; void ( string szAttachTo, string szName, wstring helpText, TableStyles eStyle )')
apiList.append('CyGInterfaceScreen.attachMultiListControlGFC(std::string szAttachTo, std::string szName, std::wstring helpText, int numLists, int defaultWidth, int defaultHeight, TableStyles eStyle):=void; void ( string szAttachTo, string szName, wstring helpText, int numLists, int defaultWidth, int defaultHeight, TableStyles eStyle )')
apiList.append('CyGInterfaceScreen.attachMultilineText(std::string szAttachTo, std::string szName, std::wstring szText, WidgetTypes eType, int iData1, int iData2, int iJustify):=void; void ( string szAttachTo, string szName, wstring szText, WidgetTypes eType, int iData1, int iData2, int iJustify )')
apiList.append('CyGInterfaceScreen.attachPanel(std::string szAttachTo, std::string szName, std::wstring title, std::wstring helpText, bool bVerticalLayout, bool bScrollable, PanelStyles eStyle):=void; void ( string szAttachTo, string szName, wstring title, wstring helpText, bool bVerticalLayout, bool bScrollable, PanelStyles eStyle )')
apiList.append('CyGInterfaceScreen.attachPanelAt(std::string szAttachTo, std::string szName, std::wstring title, std::wstring helpText, bool bVerticalLayout, bool bScrollable, PanelStyles eStyle, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szAttachTo, string szName, wstring title, wstring helpText, bool bVerticalLayout, bool bScrollable, PanelStyles eStyle, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.attachSlider(std::string szAttachTo, std::string szName, int iX, int iY, int iWidth, int iHeight, int iDefault, int iMin, int iMax, WidgetTypes eWidgetType, int iData1, int iData2, bool bIsVertical=false):=void; void ( string szAttachTo, string szName, int iX, int iY, int iWidth, int iHeight, int iDefault, int iMin, int iMax, WidgetTypes eWidgetType, int iData1, int iData2, bool bIsVertical=false )')
apiList.append('CyGInterfaceScreen.attachTableControlGFC(std::string szAttachTo, std::string szName, int numColumns, bool bIncludeHeaders, bool bDrawGrid, int iconWidth, int iconHeight, TableStyles style):=void; void ( string szAttachTo, string szName, int numColumns, bool bIncludeHeaders, bool bDrawGrid, int iconWidth, int iconHeight, TableStyles style )')
apiList.append('CyGInterfaceScreen.attachTextGFC(std::string szAttachTo, std::string szName, std::wstring text, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void ( string szAttachTo, string szName, wstring text, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.bringMinimapToFront():=void; void')
apiList.append('CyGInterfaceScreen.centerX(int iX):=int; int ( int iX )')
apiList.append('CyGInterfaceScreen.centerY(int iY):=int; int ( int iY )')
apiList.append('CyGInterfaceScreen.changeDDSGFC(std::string szName, std::string szTexture):=void; void ( string szName, string szTexture )')
apiList.append('CyGInterfaceScreen.changeDrawControl(std::string szName, std::string szTexture):=void; void ( string szName, string szTexture )')
apiList.append('CyGInterfaceScreen.changeImageButton(std::string szName, std::string szTexture):=void; void ( string szName, string szTexture )')
apiList.append('CyGInterfaceScreen.clearGraphData(std::string szName, uint uiLayer):=void; void ( string szName, uint uiLayer)')
apiList.append('CyGInterfaceScreen.clearListBoxGFC(std::string szListBoxName):=void; void ( string szListBoxName )')
apiList.append('CyGInterfaceScreen.clearMultiList(std::string szName):=void; void ( string szName    )')
apiList.append('CyGInterfaceScreen.commitTableRow(std::string szAttachTo):=void; void ( string szAttachTo )')
apiList.append('CyGInterfaceScreen.deleteWidget(std::string pszName):=void; void (string pszName)')
apiList.append('CyGInterfaceScreen.disableMultiListButton(std::string szName, int iListId, int iIndexId, std::string szTexture):=void; void ( string szName, int iListId, int iIndexId, string szTexture )')
apiList.append('CyGInterfaceScreen.enable(std::string szName, bool bEnable):=void; void ( string szName, bool bEnable )')
apiList.append('CyGInterfaceScreen.enableGridlines(std::string szName, bool bVertical, bool bHorizontal):=void; void ( string szName, bool bVertical, bool bHorizontal )')
apiList.append('CyGInterfaceScreen.enableMultiListPulse(std::string szName, bool bEnable, int listId, int iIndexId):=void; void ( string szName, bool bEnable, int listId, int iIndexId )')
apiList.append('CyGInterfaceScreen.enableSelect(std::string szControlName, bool bEnable):=void; void ( string szControlName, bool bEnable )')
apiList.append('CyGInterfaceScreen.enableSort(std::string szName):=void; Note: no description in pydoc')
apiList.append('CyGInterfaceScreen.enableWorldSounds(bool bEnable):=void; void ( bool bEnable )')
apiList.append('CyGInterfaceScreen.getCheckBoxState(std::string szName):=bool; bool ( string szName )')
apiList.append('CyGInterfaceScreen.getCurrentTime():=int; int ()')
apiList.append('CyGInterfaceScreen.getEditBoxString(std::string szName):=std::wstring; wstring ( string szName )')
apiList.append('CyGInterfaceScreen.getPullDownData(std::string szName, int iIndex):=int; int ( string szName, int iIndex )')
apiList.append('CyGInterfaceScreen.getPullDownType(std::string szName, int iIndex):=int; int ( string szName, int iIndex )')
apiList.append('CyGInterfaceScreen.getPythonFileID():=int; int')
apiList.append('CyGInterfaceScreen.getRenderInterfaceOnly():=bool; bool ()')
apiList.append('CyGInterfaceScreen.getScreenGroup():=int; int ()')
apiList.append('CyGInterfaceScreen.getSelectedPullDownID(std::string szName):=int; int (string szName )')
apiList.append('CyGInterfaceScreen.getTableNumColumns(std::string szName):=int; int (string szName )')
apiList.append('CyGInterfaceScreen.getTableNumRows(std::string szName):=int; int (string szName )')
apiList.append('CyGInterfaceScreen.getTableText(std::string szName, unsigned int iColumn, unsigned int iRow):=void; void ( string szName, unsigned int iColumn, unsigned int iRow )')
apiList.append('CyGInterfaceScreen.getXResolution():=int; int ()')
apiList.append('CyGInterfaceScreen.getYResolution():=int; int ()')
apiList.append('CyGInterfaceScreen.hide(std::string szName):=void; void ( string szName )')
apiList.append('CyGInterfaceScreen.hideEndTurn(std::string szName):=void; void ( string szName )')
apiList.append('CyGInterfaceScreen.hideList(int iID):=void; void ( int iID )')
apiList.append('CyGInterfaceScreen.hideScreen():=void; void')
apiList.append('CyGInterfaceScreen.initMinimap(int iLeft, int iRight, int iTop, int iBottom, float fZ):=void; void (int iLeft, int iRight, int iTop, int iBottom, float fZ)')
apiList.append('CyGInterfaceScreen.isActive():=bool; bool ()')
apiList.append('CyGInterfaceScreen.isAlwaysShown():=bool; bool ()')
apiList.append('CyGInterfaceScreen.isPersistent():=bool; bool ()')
apiList.append('CyGInterfaceScreen.isRequiredForcedRedraw():=bool; bool ()')
apiList.append('CyGInterfaceScreen.isRowSelected(std::string szName, int iRow):=bool; bool ( string szName, int iRow )')
apiList.append('CyGInterfaceScreen.markMinimapTexturePlotDirty(int iPlotX, int iPlotY):=void; void (int iPlotX, int iPlotY)')
apiList.append('CyGInterfaceScreen.minimapClearAllFlashingTiles():=void; void ()')
apiList.append('CyGInterfaceScreen.minimapFlashPlot(int iX, int iY, int eColor, float fSeconds):=void; void (int iX, int iY, int eColor, float fSeconds)')
apiList.append('CyGInterfaceScreen.modifyLabel(std::string szName, std::wstring szText, unsigned int uiFlags):=void; void ( string szName, wstring szText, unsigned int uiFlags )')
apiList.append('CyGInterfaceScreen.modifyString(std::string szName, std::wstring szText, unsigned int uiFlags):=void; void ( string szName, wstring szText, unsigned int uiFlags )')
apiList.append('CyGInterfaceScreen.moveBackward(std::string szName):=void; void ( string szName )')
apiList.append('CyGInterfaceScreen.moveForward(std::string szName):=void; void ( string szName )')
apiList.append('CyGInterfaceScreen.moveItem(std::string szName, float fX, float fY, float fZ):=void; void ( string szName, float fX, float fY, float fZ )')
apiList.append('CyGInterfaceScreen.moveToBack(std::string szName):=void; void ( string szName )')
apiList.append('CyGInterfaceScreen.moveToFront(std::string szName):=void; void ( string szName )')
apiList.append('CyGInterfaceScreen.performLeaderheadAction(std::string  szName, int eAction):=void; void ( string  szName, int eAction )')
apiList.append('CyGInterfaceScreen.playMovie(std::string szMovieName, float fX, float fY, float fWidth, float fHeight, float fZ):=void; void ( string szMovieName, float fX, float fY, float fWidth, float fHeight, float fZ)')
apiList.append('CyGInterfaceScreen.prependListBoxString(std::string szAttachTo, std::wstring item, WidgetTypes eType, int iData1, int iData2, int iJustify):=void; void ( string szAttachTo, wstring item, WidgetTypes eType, int iData1, int iData2, int iJustify )')
apiList.append('CyGInterfaceScreen.registerHideList(boost::python::list& szNames, int iSize, int iID):=void; void ( boost::python::list& szNames, int iSize, int iID )')
apiList.append('CyGInterfaceScreen.removeLineGFC(std::string szDrawCtrlName, std::string szName):=void; void ( string szDrawCtrlName, string szName )')
apiList.append('CyGInterfaceScreen.renderMinimapWorldTexture():=void; void ()')
apiList.append('CyGInterfaceScreen.selectMultiList(std::string szName, int iListID):=void; void ( string szName, int iListID )')
apiList.append('CyGInterfaceScreen.selectRow(std::string szName, int iRow, bool bSelected):=void; void ( string szName, int iRow, bool bSelected )')
apiList.append('CyGInterfaceScreen.setActivation(std::string szName, ActivationTypes activation):=void; void (string szName, ActivationTypes activation)')
apiList.append('CyGInterfaceScreen.setAlwaysShown(bool bAlwaysShown):=void; void ( bool bAlwaysShown )')
apiList.append('CyGInterfaceScreen.setBarPercentage(std::string szName, int iBar, float fPercent):=void; void ( string szName, int iBar, float fPercent )')
apiList.append('CyGInterfaceScreen.setButtonGFC(std::string szName, std::wstring szText, std::string szTexture, int iX, int iY, int imageWidth, int imageHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle):=void; void ( string szName, wstring szText, string szTexture, int iX, int iY, int imageWidth, int imageHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle )')
apiList.append('CyGInterfaceScreen.setCloseOnEscape(bool bCloseOnEscape):=void; void ( bool bCloseOnEscape )')
apiList.append('CyGInterfaceScreen.setDimensions(int iX, int iY, int iWidth, int iHeight):=void; void ( int iX, int iY, int iWidth, int iHeight )')
apiList.append('CyGInterfaceScreen.setDying(bool bDying):=void; void ( bool bDying )')
apiList.append('CyGInterfaceScreen.setEditBoxMaxCharCount(std::string szName, int maxCharCount, int preferredCharCount):=void; void ( string szName, int maxCharCount, int preferredCharCount )')
apiList.append('CyGInterfaceScreen.setEditBoxString(std::string szName, std::wstring szString):=void; void ( string szName, wstring szString )')
apiList.append('CyGInterfaceScreen.setEditBoxTextColor(std::string szName, NiColorA kColor):=void; void ( string szName, NiColorA kColor )')
apiList.append('CyGInterfaceScreen.setEndTurnState(std::string szName, std::wstring szText):=void; void (string szName, wstring szText)')
apiList.append('CyGInterfaceScreen.setExitText(std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont):=void; void ( wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont )')
apiList.append('CyGInterfaceScreen.setFocus(std::string szName):=void; void (string szName)')
apiList.append('CyGInterfaceScreen.setForcedRedraw(bool bRequiresForcedRedraw):=void; void ( bool bRequiresForcedRedraw )')
apiList.append('CyGInterfaceScreen.setGraphGrid(std::string szName, float fXstart, float fdX, float fYstart, float fdY):=void; void (string szName, float fXstart, float fdX, float fYstart, float fdY)')
apiList.append('CyGInterfaceScreen.setGraphLabelX(std::string szName, std::wstring szLabel):=void; void (string szName, wstring szLabel)')
apiList.append('CyGInterfaceScreen.setGraphLabelY(std::string szName, std::wstring szLabel):=void; void (string szName, wstring szLabel)')
apiList.append('CyGInterfaceScreen.setGraphXDataRange(std::string szName, float fXmin, float fXmax):=void; void (string szName, float fXmin, float fXmax)')
apiList.append('CyGInterfaceScreen.setGraphYDataRange(std::string szName, float fYmin, float fYmax):=void; void (string szName, float fYmin, float fYmax)')
apiList.append('CyGInterfaceScreen.setHelpTextArea(float fWidth, FontTypes eFont, float fX, float fY, float fZ, bool bFloating, std::string szArtFile, bool bExpandRight, bool bExpandDown, uint uiFlags, int iMinWidth):=void; void ( float fWidth, FontTypes eFont, float fX, float fY, float fZ, bool bFloating, string szArtFile, bool bExpandRight, bool bExpandDown, uint uiFlags, int iMinWidth )')
apiList.append('CyGInterfaceScreen.setHelpTextString(std::wstring szString):=void; void ( wstring szString )')
apiList.append('CyGInterfaceScreen.setHitTest(std::string szName, HitTestTypes hitTest):=void; void (string szName, hitTestTypes hitTest)')
apiList.append('CyGInterfaceScreen.setImageButton(std::string szName, std::string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.setImageButtonAt(std::string szName, std::string szAttachTo, std::string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, string szTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.setLabel(std::string szName, std::string szAtttachTo, std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void ( string szName, string szAtttachTo, wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.setLabelAt(std::string szName, std::string szAttachTo, std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.setLeaderheadAdvisor(std::string szName, int eAdvisor):=void; void ( string  szName, int eAdvisor )')
apiList.append('CyGInterfaceScreen.setLeaderheadMood(std::string  szName, int eAttitude):=void; void ( string  szName, int eAttitude )')
apiList.append('CyGInterfaceScreen.setListBoxStringGFC(std::string szName, int item, std::wstring szText, WidgetTypes eType, int iData1, int iData2, int iJustify):=void; void ( string szName, int item, std::wstring szText, WidgetTypes eType, int iData1, int iData2, int iJustify )')
apiList.append('CyGInterfaceScreen.setMainInterface(bool bMain):=void; void (bool bMain)')
apiList.append('CyGInterfaceScreen.setMinimapColor(MinimapModeTypes eMinimapMode, int iX, int iY, int iColor, float fAlpha):=void; void (MinimapModeTypes eMinimapMode, int iX, int iY, int iColor, float fAlpha)')
apiList.append('CyGInterfaceScreen.setMinimapMap(CyReplayInfo* pReplayInfo, int iLeft, int iRight, int iTop, int iBottom, float fZ):=void; void (const CyReplayInfo* pReplayInfo, int iLeft, int iRight, int iTop, int iBottom, float fZ)')
apiList.append('CyGInterfaceScreen.setMinimapMode(MinimapModeTypes eMode):=void; void (MinimapModeTypes eMode)')
apiList.append('CyGInterfaceScreen.setMinimapNoRender(bool value):=void; void (bool value)')
apiList.append('CyGInterfaceScreen.setPanelColor(std::string szName, int iRed, int iGreen, int iBlue):=void; void ( string szName, int iRed, int iGreen, int iBlue )')
apiList.append('CyGInterfaceScreen.setPanelSize(std::string szName, int iX, int iY, int iWidth, int iHeight):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight )')
apiList.append('CyGInterfaceScreen.setPersistent(bool bPersistent):=void; void ( bool bPersistent )')
apiList.append('CyGInterfaceScreen.setRenderInterfaceOnly(bool val):=void; void (bool val)')
apiList.append('CyGInterfaceScreen.setScreenGroup(int iGroup):=void; void ( int iGroup )')
apiList.append('CyGInterfaceScreen.setSelectedListBoxStringGFC(std::string szName, int item):=void; void ( string szName, int item )')
apiList.append('CyGInterfaceScreen.setShowFor(int i):=void; Note: no description in pydoc')
apiList.append('CyGInterfaceScreen.setSound(std::string pszSound):=void; void (string pszSound)')
apiList.append('CyGInterfaceScreen.setSoundId(int iSoundId):=void; void (int iSoundId)')
apiList.append('CyGInterfaceScreen.setStackedBarColors(std::string szName, int iBar, int eColor):=void; void ( string szName, int iBar, int eColor )')
apiList.append('CyGInterfaceScreen.setStackedBarColorsAlpha(std::string szName, int iBar, int eColor, float fAlpha):=void; void ( string szName, int iBar, int eColor, float fAlpha )')
apiList.append('CyGInterfaceScreen.setStackedBarColorsRGB(std::string szName, int iBar, int iRed, int iGreen, int iBlue, float fAlpha):=void; void ( string szName, int iBar, int iRed, int iGreen, int iBlue, float fAlpha )')
apiList.append('CyGInterfaceScreen.setState(std::string szName, bool eState):=void; void ( string szName, bool /*FxCheckBox::CheckBoxState*/ eState )')
apiList.append('CyGInterfaceScreen.setStyle(std::string szName, std::string szStyle):=void; void (string szName, string szStyle)')
apiList.append('CyGInterfaceScreen.setTableColumnHeader(std::string szName, int iColumn, std::wstring header, int iWidth):=void; void ( string szName, int iColumn, wstring header, int iWidth )')
apiList.append('CyGInterfaceScreen.setTableColumnRightJustify(std::string szName, int iCol):=void; void ( string szName, int iCol )')
apiList.append('CyGInterfaceScreen.setTableDate(std::string szName, int iColumn, int iRow, std::wstring text, std::string szIcon, WidgetTypes eWidgetType, int iData1, int iData2, int iJustify):=void; void ( string szName, int iColumn, int iRow, wstring text, string szIcon, WidgetTypes eWidgetType, int iData1, int iData2, int iJustify )')
apiList.append('CyGInterfaceScreen.setTableInt(std::string szName, int iColumn, int iRow, std::wstring text, std::string szIcon, WidgetTypes eWidgetType, int iData1, int iData2, int iJustify):=void; Note: no description in pydoc')
apiList.append('CyGInterfaceScreen.setTableNumRows(std::string szName, unsigned int numRows):=void; void ( string szName, unsigned int numRows )')
apiList.append('CyGInterfaceScreen.setTableRowHeight(std::string szName, int iRow, int iHeight):=void; void ( string szName, int iRow, int iHeight )')
apiList.append('CyGInterfaceScreen.setTableText(std::string szName, int iColumn, int iRow, std::wstring text, std::string szIcon, WidgetTypes eWidgetType, int iData1, int iData2, int iJustify):=void; void ( string szName, int iColumn, int iRow, wstring text, string szIcon, WidgetTypes eWidgetType, int iData1, int iData2, int iJustify )')
apiList.append('CyGInterfaceScreen.setTableTextKey(std::string szName, int iColumn, std::wstring szKey, int iRowTest, std::wstring text, WidgetTypes eWidgetType, int iData1, int iData2, int iJustify, int iNumRows):=void; void ( string szName, int iColumn, wstring szKey, int iRowTest, wstring text, WidgetTypes eWidgetType, int iData1, int iData2, int iJustify, int iNumRows )')
apiList.append('CyGInterfaceScreen.setText(std::string szName, std::string szAtttachTo, std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void ( string szName, string szAtttachTo, wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.setTextAt(std::string szName, std::string szAttachTo, std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
apiList.append('CyGInterfaceScreen.setToolTipAlignment(std::string szName, ToolTipAlignTypes alignment):=void; void (string szName, ToolTipAlignTypes alignment)')
apiList.append('CyGInterfaceScreen.setViewMin(std::string szName, int iWidth, int iHeight):=void; void ( string szName, int iWidth, int iHeight )')
apiList.append('CyGInterfaceScreen.show(std::string szName):=void; void ( string szName )')
apiList.append('CyGInterfaceScreen.showEndTurn(std::string szName):=void; void (string szName)')
apiList.append('CyGInterfaceScreen.showRange(std::string szName, int iLow, int iHigh):=void; void ( string szName, int iLow, int iHigh )')
apiList.append('CyGInterfaceScreen.showScreen(PopupStates bState, bool bPassInput):= void; void ( PopupStates bState, bool bPassInput )')
apiList.append('CyGInterfaceScreen.showWindowBackground(bool bShow):=void; void ( bool bShow )')
apiList.append('CyGInterfaceScreen.updateAppropriateCitySelection(std::string szName, int iNumRows):=void; void ( string szName, int iNumRows )')
apiList.append('CyGInterfaceScreen.updateMinimap(float fTime):=void; void (float fTime)')
apiList.append('CyGInterfaceScreen.updateMinimapColorFromMap(MinimapModeTypes eMode, float fAlpha):=void; void (MinimapModeTypes eMode, float fAlpha)')
apiList.append('CyGInterfaceScreen.updateMinimapSection(bool bWholeMap):=void; void (bool bWholeMap)')
apiList.append('CyGInterfaceScreen.updateMinimapVisibility():=void;')

apiList.append('CyGTabCtrl...nonSDK')
apiList.append('CyGTabCtrl.addSectionButton(char *szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex):=void; void addSectionButton( char *szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex)')
apiList.append('CyGTabCtrl.addSectionCheckbox(char* szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex, bool bInitialState):=void; void addSectionCheckbox( char *szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex, bool bInitialState)')
apiList.append('CyGTabCtrl.addSectionDropdown(std::string szItems,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex, int iInitialSelection):=void; void addSectionDropdown( std::vector<CvString>& szItems,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex, int iInitialSelection)')
apiList.append('CyGTabCtrl.addSectionEditCtrl(char* szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex):=void; void addSectionEditCtrl( char *szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex)')
apiList.append('CyGTabCtrl.addSectionLabel(char* szLabel, int iTabIndex):=void; void addSectionLabel( char *szLabel, int iTabIndex)')
apiList.append('CyGTabCtrl.addSectionRadioButton(char* szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex, bool bInitialState):=void; void addSectionRadioButton( char *szLabel,  std::string& szPythonCBModule, std::string& szPythonCBFxn, std::string& szPythonID, int iTabIndex, bool bInitialState)')
apiList.append('CyGTabCtrl.addSectionSeparator(int iTab):=void; void addSectionSeparator(iTab)')
apiList.append('CyGTabCtrl.addSectionSlider(std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iTabIndex, int iMin, int iMax, int iInitialVal, int iFormatNumber, int iFormatDecimal):=void; std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iTabIndex, int iMin, int iMax, int iInitialVal, int iFormatNumber, int iFormatDecimal')
apiList.append('CyGTabCtrl.addSectionSpinner(std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iTabIndex, float fMin, float fMax, float fInc, float fInitialVal)):=void; std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iTabIndex, float fMin, float fMax, float fInc, float fInitialVal)')
apiList.append('CyGTabCtrl.addTabSection(char* szLabel):=void; void addTabSection(const char* szLabel)')
apiList.append('CyGTabCtrl.attachButton(std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID):=void; void attachButton (std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID)')
apiList.append('CyGTabCtrl.attachCheckBox(std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, bool bInitialState):=void; void attachCheckBox (std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, bool bInitialState)')
apiList.append('CyGTabCtrl.attachDropDown(std::string szParent, std::string szName, const char* szID, python::tuple& szItems, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iInitialSelection):=void; void attachDropDown (std::string szParent, std::string szName, const char* szID, python::tuple& szItems, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iInitialSelection)')
apiList.append('CyGTabCtrl.attachEdit(std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID):=void; void attachEdit (std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID)')
apiList.append('CyGTabCtrl.attachExpandSpacer(std::string szParent):=void; void attachExpandSpacer (std::string szParent)')
apiList.append('CyGTabCtrl.attachFixedSpacer(std::string szParent, int iSize):=void; void attachFixedSpacer (std::string szParent, int iSize)')
apiList.append('CyGTabCtrl.attachHBox(std::string szParent, std::string szName):=void; void attachHBox (std::string szParent, std::string szName)')
apiList.append('CyGTabCtrl.attachHSeparator(std::string szParent, std::string szName):=void; void attachHSeparator (std::string szParent, std::string szName)')
apiList.append('CyGTabCtrl.attachHSlider(std::string szParent, std::string szName, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iMin, int iMax, int iInitialVal):=void; void attachHSlider (std::string szParent, std::string szName, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iMin, int iMax, int iInitialVal)')
apiList.append('CyGTabCtrl.attachImage(std::string szParent, std::string szName, std::wstring szFilename):=void; void attachImage (std::string szParent, std::string szName, std::wstring szFilename)')
apiList.append('CyGTabCtrl.attachLabel(std::string szParent, std::string szName, std::wstring szLabel):=void; void attachLabel (std::string szParent, std::string szName, std::wstring szLabel)')
apiList.append('CyGTabCtrl.attachPanel(std::string szParent, std::string szName):=void; void attachPanel (std::string szParent, std::string szName)')
apiList.append('CyGTabCtrl.attachRadioButton(std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, bool bInitialState):=void; void attachRadioButton (std::string szParent, std::string szName, std::wstring szLabel, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, bool bInitialState)')
apiList.append('CyGTabCtrl.attachScrollPanel(std::string szParent, std::string szName):=void; void attachScrollPanel (std::string szParent, std::string szName)')
apiList.append('CyGTabCtrl.attachSpacer(std::string szParent):=void; void attachSpacer (std::string szParent)')
apiList.append('CyGTabCtrl.attachSpinner(std::string szParent, std::string szName, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, float fMin, float fMax, float fInc, float fInitialVal, int iFormatNumber, int iFormatDecimal):=void; void attachSpinner (std::string szParent, std::string szName, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, float fMin, float fMax, float fInc, float fInitialVal, int iFormatNumber, int iFormatDecimal)')
apiList.append('CyGTabCtrl.attachTabItem(std::string szName, std::wstring szLabel):=void; void attachTabItem (std::string szName, std::wstring szLabel)')
apiList.append('CyGTabCtrl.attachTitledPanel(std::string szParent, std::string szName, std::wstring szLabel):=void; void attachTitledPanel (std::string szParent, std::string szName, std::wstring szLabel)')
apiList.append('CyGTabCtrl.attachVBox(std::string szParent, std::string szName):=void; void attachVBox (std::string szParent, std::string szName)')
apiList.append('CyGTabCtrl.attachVSeparator(std::string szParent, std::string szName):=void; void attachVSeparator (std::string szParent, std::string szName)')
apiList.append('CyGTabCtrl.attachVSlider(std::string szParent, std::string szName, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iMin, int iMax, int iInitialVal):=void; void attachVSlider (std::string szParent, std::string szName, const std::string& szPythonCBModule, const std::string& szPythonCBFxn, const std::string& szPythonID, int iMin, int iMax, int iInitialVal)')
apiList.append('CyGTabCtrl.changeDropdownContents(std::string szID, tuple szItems):=void; void (string szID, tuple szItems)')
apiList.append('CyGTabCtrl.create():=void; void create()')
apiList.append('CyGTabCtrl.createByName(const char* name):=void; void createByName(const char* name)')
apiList.append('CyGTabCtrl.destroy():=void; void destroy()')
apiList.append('CyGTabCtrl.enable(bool bVal):=void; void enable(bool bVal)')
apiList.append('CyGTabCtrl.getActiveTab():=bool; bool getActiveTab()')
apiList.append('CyGTabCtrl.getCheckBoxState(const char *szTabName, const char *szButtonText):=void; void getCheckBoxState(const char *szTabName, const wchar *szButtonText)')
apiList.append('CyGTabCtrl.getControlsExpanding():=bool; bool getControlsExpanding() const')
apiList.append('CyGTabCtrl.getDropDownSelection(const char *szTabName, const char *szID):=void; void getDropDownSelection(const char *szTabName, const char *szID)')
apiList.append('CyGTabCtrl.getRadioButtonState(const char *szTabName, const char *szButtonText):=void; void getRadioButtonState(const char *szTabName, const wchar *szButtonText)')
apiList.append('CyGTabCtrl.getRadioValue(std::string szName):=float; float getRadioValue (std::string szName)')
apiList.append('CyGTabCtrl.getText(std::string szName):=std::wstring; std::wstring getText (std::string szName)')
apiList.append('CyGTabCtrl.getValue(std::string szName):=float; float getValue (std::string szName)')
apiList.append('CyGTabCtrl.isEnabled():=bool; bool isEnabled()')
apiList.append('CyGTabCtrl.isNone():=bool; bool isNone() - Is this instance valid?')
apiList.append('CyGTabCtrl.setActivation(std::string szName, std::string szActivationType):=void; void setActivation (std::string szName, std::string szActivationType)')
apiList.append('CyGTabCtrl.setCheckBoxState(const char *szTabName, const wchar *szButtonText, bool bState):=void; void setCheckBoxState(const char *szTabName, const wchar *szButtonText, bool bState)')
apiList.append('CyGTabCtrl.setColumnLength(int iSize):=void; void setColumnLength(int iSize)')
apiList.append('CyGTabCtrl.setControlFlag(std::string szName, std::string szFlag):=void; void setControlFlag (std::string szName, std::string szFlag)')
apiList.append('CyGTabCtrl.setControlsExpanding(bool bExp):=void; void setControlsExpanding(bool bExp)')
apiList.append('CyGTabCtrl.setDropDownSelection(const char *szTabName, const char *szID, int iSelection):=void; void setDropDownSelection(const char *szTabName, const char *szID, int iSelection)')
apiList.append('CyGTabCtrl.setEditCtrlText(std::wstring szTabName, std::wstring szEditCtrlText, std::wstring szNewText):=void; void (std::wstring szTabName, std::wstring szEditCtrlText, std::wstring szNewText)')
apiList.append('CyGTabCtrl.setEnabled(std::string szName, bool bEnabled):=void; void setEnabled (std::string szName, bool bEnabled)')
apiList.append('CyGTabCtrl.setFocus(std::string szName):=void; void setFocus (std::string szName)')
apiList.append('CyGTabCtrl.setHitTest(std::string szName, std::string szHitTestType):=void; void setHitTest (std::string szName, std::string szHitTestType)')
apiList.append('CyGTabCtrl.setKeyFocus(std::string szName, std::string szKey, std::string szTarget):=void; void setKeyFocus (std::string szName, std::string szKey, std::string szTarget)')
apiList.append('CyGTabCtrl.setLayoutFlag(std::string szName, std::string szFlag):=void; void setLayoutFlag (std::string szName, std::string szFlag)')
apiList.append('CyGTabCtrl.setModal(bool modal):=void; void setModal (bool modal)')
apiList.append('CyGTabCtrl.setNumColumns(int iSize):=void; void setNumColumns(int iSize)')
apiList.append('CyGTabCtrl.setRadioButtonState(const char *szTabName, const wchar *szButtonText, bool bState):=void; void setRadiioButtonState(const char *szTabName, const wchar *szButtonText, bool bState)')
apiList.append('CyGTabCtrl.setRadioValue(std::string szName, float fValue):=void; void setRadioValue (std::string szName, float fValue)')
apiList.append('CyGTabCtrl.setSize(int width, int height):=void; void setSize (int width, int height)')
apiList.append('CyGTabCtrl.setSliderWidth(std::string szName, int iWidth):=void; void setSliderWidth(std::string szName, int iWidth)')
apiList.append('CyGTabCtrl.setStyle(std::string szName, std::string szStyle):=void; void setStyle (std::string szName, std::string szStyle)')
apiList.append('CyGTabCtrl.setTabFocus(std::string szName, std::string szNext, std::string szPrev):=void; void setTabFocus (std::string szName, std::string szNext, std::string szPrev)')
apiList.append('CyGTabCtrl.setText(std::string szName, std::wstring szText):=void; void setText (std::string szName, std::wstring szText)')
apiList.append('CyGTabCtrl.setToolTip(std::string szName, std::wstring szHelpText):=void; void setToolTip (std::string szName, std::wstring szHelpText)')
apiList.append('CyGTabCtrl.setValue(std::string szName, float fValue):=void; void setValue (std::string szName, float fValue)')
apiList.append('CyGTabCtrl.toggle():=void; void toggle()')
apiList.append('CyGlobeLayer...nonSDK')
apiList.append('CyGlobeLayer.getButtonStyle():=std::string; const char* getButtonStyle()')
apiList.append('CyGlobeLayer.getCurrentOption():=int; int getCurrentOption()')
apiList.append('CyGlobeLayer.getName():=char*; const char* getName()')
apiList.append('CyGlobeLayer.getNumOptions():=int; int getNumLayers()')
apiList.append('CyGlobeLayer.getOptionButton(int iOptionID):=std::string; std::string getOptionButton(int iOptionID)')
apiList.append('CyGlobeLayer.getOptionName(int iOptionID):=std::string; std::wstring getOptionName(int iOptionID)')
apiList.append('CyGlobeLayer.isGlobeviewRequired():=bool; bool isGlobeviewRequired()')
apiList.append('CyGlobeLayer.isNone():=bool; bool isNone()')
apiList.append('CyGlobeLayer.needsPlayerFilter():=bool; bool needsPlayerFilter()')
apiList.append('CyGlobeLayer.registerGlobeLayer():=void; void registerGlobeLayer()')
apiList.append('CyGlobeLayer.shouldCitiesZoom():=bool; bool shouldCitiesZoom()')
apiList.append('CyGlobeLayerManager...nonSDK')
apiList.append('CyGlobeLayerManager.getCurrentLayer():=CvGlobeLayer*; CvGlobeLayer* getCurrentLayer')
apiList.append('CyGlobeLayerManager.getCurrentLayerID():=int; int getCurrentLayerID()')
apiList.append('CyGlobeLayerManager.getCurrentLayerName():=TCHAR*; const TCHAR* getCurrentLayerName()')
apiList.append('CyGlobeLayerManager.getLayer(int i):=CvGlobeLayer*; CvGlobeLayer* getLayer(int i)')
apiList.append('CyGlobeLayerManager.getLayerID(std::string layer):=int; int getLayerID(const TCHAR*)')
apiList.append('CyGlobeLayerManager.getNumLayers():=int; int getNumLayers()')
apiList.append('CyGlobeLayerManager.setCurrentLayer(int iLayerID):=void; void setCurrentLayer()')
apiList.append('CyInterface...nonSDK')
apiList.append('CyInterface.addCombatMessage(PlayerTypes ePlayer, std::wstring szString):=void; void (PlayerTypes ePlayer, wstring szString)')
apiList.append('CyInterface.addImmediateMessage(std::wstring szString, std::string szSound):=void; void (wstring szString, string szSound)')
apiList.append('CyInterface.addMessage(PlayerTypes ePlayer, bool bForce, int iLength, std::wstring szString, std::string szSound, InterfaceMessageTypes eType, std::string szIcon, ColorTypes eFlashColor, int iFlashX, int iFlashY, bool bShowOffScreenArrows, bool bShowOnScreenArrows):=void; void (int /*PlayerTypes*/ ePlayer, bool bForce, int iLength, wstring szString, string szSound = NULL, int /*InterfaceMessageTypes*/ eType = MESSAGE_TYPE_INFO, string szIcon = NULL, ColorTypes eFlashColor = NO_COLOR, int iFlashX = -1, int iFlashY = -1, bool bShowOffScreenArrows = false, bool bShowOnScreenArrows = false)')
apiList.append('CyInterface.addSelectedCity(CyCity* pNewValue):=void; void (CyCity* pNewValue)')
apiList.append('CyInterface.canCreateGroup():=bool; bool ()')
apiList.append('CyInterface.canDeleteGroup():=bool; bool ()')
apiList.append('CyInterface.canHandleAction(int iAction, bool bTestVisible):=bool; bool (int iAction, bool bTestVisible)')
apiList.append('CyInterface.canSelectHeadUnit():=bool; bool ()')
apiList.append('CyInterface.checkFlashReset(PlayerTypes ePlayer):=void; void (int /*PlayerTypes*/ ePlayer)')
apiList.append('CyInterface.checkFlashUpdate():=bool; bool ()')
apiList.append('CyInterface.clearSelectedCities():=void; void ()')
apiList.append('CyInterface.clearSelectionList():=void; void ()')
apiList.append('CyInterface.countEntities(int iI):=int; int (int iI)')
apiList.append('CyInterface.determineWidth(std::wstring szBuffer):=int; int (wstring szBuffer)')
apiList.append('CyInterface.doPing(int iX, int iY, PlayerTypes ePlayer):=void; void (int iX, int iY, int /*PlayerTypes*/ ePlayer)')
apiList.append('CyInterface.endTimer(std::string szOutputText):=void; void (string szOutputText )')
apiList.append('CyInterface.getActionsToShow():=tuple; tuple ()')
apiList.append('CyInterface.getCityTabSelectionRow():=int; int ()')
apiList.append('CyInterface.getCursorPlot():=CyPlot; CyPlot* ()')
apiList.append('CyInterface.getEndTurnState():=EndTurnButtonStates; EndTurnButtonStates ()')
apiList.append('CyInterface.getHeadSelectedCity():=CyCity; CyCity* ()')
apiList.append('CyInterface.getHeadSelectedUnit():=CyUnit; CyUnit* ()')
apiList.append('CyInterface.getHelpString():=std::string; wstring ()')
apiList.append('CyInterface.getHighlightPlot():=CyPlot; CyPlot* ()')
apiList.append('CyInterface.getInterfaceMode():=InterfaceModeTypes; InterfaceModeTypes ()')
apiList.append('CyInterface.getInterfacePlotUnit():=CyUnit; CyUnit* ()')
apiList.append('CyInterface.getLengthSelectionList():=int; int ()')
apiList.append('CyInterface.getMouseOverPlot():=CyPlot; CyPlot* ()')
apiList.append('CyInterface.getMousePos():=POINT; POINT getMousePos() - returns the mouse coords')
apiList.append('CyInterface.getNumOrdersQueued():=int; int ()')
apiList.append('CyInterface.getNumVisibleUnits():=int; int ()')
apiList.append('CyInterface.getOrderNodeData1(int iNode):=int; int (int iNode)')
apiList.append('CyInterface.getOrderNodeData2(int iNode):=int; int (int iNode)')
apiList.append('CyInterface.getOrderNodeSave(int iNode):=bool; bool (int iNode)')
apiList.append('CyInterface.getOrderNodeType(int iNode):=OrderTypes; OrderTypes (int iNode)')
apiList.append('CyInterface.getPlotListColumn():=int; int ()')
apiList.append('CyInterface.getSelectionPlot():=CyPlot; CyPlot* ()')
apiList.append('CyInterface.getSelectionUnit():=CyUnit; CyUnit* ()')
apiList.append('CyInterface.getShowInterface():=InterfaceVisibility; InterfaceVisibility ()')
apiList.append('CyInterface.insertIntoSelectionList(CyUnit* pUnit, bool bClear, bool bToggle, bool bGroup, bool bSound):=void; void (CyUnit* pUnit, bool bClear, bool bToggle, bool bGroup, bool bSound)')
apiList.append('CyInterface.isCityScreenUp():=bool; bool ()')
apiList.append('CyInterface.isCitySelected(CyCity* pCity):=bool; bool (CyCity* pCity)')
apiList.append('CyInterface.isCitySelection():=bool; bool ()')
apiList.append('CyInterface.isDirty(InterfaceDirtyBits eDirty):=bool; bool (InterfaceDirtyBits eDirty)')
apiList.append('CyInterface.isFlashing():=bool; bool ()')
apiList.append('CyInterface.isFlashingPlayer(int iPlayer):=bool; bool (int iPlayer)')
apiList.append('CyInterface.isInMainMenu():=bool; bool ()')
apiList.append('CyInterface.isLeftMouseDown():=bool; bool ()')
apiList.append('CyInterface.isNetStatsVisible():=bool; bool ()')
apiList.append('CyInterface.isOOSVisible():=bool; bool ()')
apiList.append('CyInterface.isRightMouseDown():=bool; bool ()')
apiList.append('CyInterface.isScoresVisible():=bool; bool ()')
apiList.append('CyInterface.isScreenUp(int iEnumVal):=bool; bool (int iEnumVal)')
apiList.append('CyInterface.isUnitFocus():=bool; bool ()')
apiList.append('CyInterface.isYieldVisibleMode():=bool; bool ()')
apiList.append('CyInterface.lookAtCityBuilding(int iCity, int iBuilding):=void; void (int iCity, int iBuilding)')
apiList.append('CyInterface.lookAtCityOffset(int iCity):=void; void (int iCity)')
apiList.append('CyInterface.makeInterfaceDirty():=void; void ()')
apiList.append('CyInterface.mirrorsSelectionGroup():=bool; bool ()')
apiList.append('CyInterface.noTechSplash():=bool; bool ()')
apiList.append('CyInterface.playAdvisorSound(std::string pszSound):=void; void (string pszSound)')
apiList.append('CyInterface.playGeneralSound(std::string pszSound):=void; void (string pszSound)')
apiList.append('CyInterface.playGeneralSoundByID(int iScriptID):=void; void (int iScriptID)')
apiList.append('CyInterface.removeFromSelectionList(CyUnit* pUnit):=void; void (CyUnit* pUnit)')
apiList.append('CyInterface.selectAll(CyPlot* pPlot):=void; void (CyPlot* pPlot)')
apiList.append('CyInterface.selectCity(CyCity* pNewValue, bool bTestProduction):=void; void (CyCity* pNewValue, bool bTestProduction)')
apiList.append('CyInterface.selectGroup(CyUnit* pUnit, bool bShift, bool bCtrl, bool bAlt):=void; void (CyUnit* pUnit, bool bShift, bool bCtrl, bool bAlt)')
apiList.append('CyInterface.selectHotKeyUnit(int iHotKeyNumber):=int; int (int iHotKeyNumber)')
apiList.append('CyInterface.selectUnit(CyUnit* pUnit, bool bClear, bool bToggle, bool bSound):=void; void (CyUnit* pUnit, bool bClear, bool bToggle, bool bSound)')
apiList.append('CyInterface.setCityTabSelectionRow(CityTabTypes eIndex):=void; void (int/*CityTabTypes*/ eIndex)')
apiList.append('CyInterface.setDirty(InterfaceDirtyBits eDirty, bool bDirty):=void; void (InterfaceDirtyBits eDirty, bool bDirty)')
apiList.append('CyInterface.setPausedPopups(bool bPausedPopups):=void; void ( bool bPausedPopups )')
apiList.append('CyInterface.setShowInterface(InterfaceVisibility eInterfaceVisibility):=void; void (InterfaceVisibility eInterfaceVisibility)')
apiList.append('CyInterface.setWorldBuilder(bool bTurnOn):=void; void (bool bTurnOn)')
apiList.append('CyInterface.shiftKey():=bool; bool ()')
apiList.append('CyInterface.shouldDisplayEndTurn():=bool; bool ()')
apiList.append('CyInterface.shouldDisplayEndTurnButton():=bool; bool ()')
apiList.append('CyInterface.shouldDisplayFlag():=bool; bool ()')
apiList.append('CyInterface.shouldDisplayReturn():=bool; bool ()')
apiList.append('CyInterface.shouldDisplayUnitModel():=bool; bool ()')
apiList.append('CyInterface.shouldDisplayWaitingOthers():=bool; bool ()')
apiList.append('CyInterface.shouldDisplayWaitingYou():=bool; bool ()')
apiList.append('CyInterface.shouldFlash(int iPlayer):=bool; bool (int iPlayer)')
apiList.append('CyInterface.shouldShowAction(int iAction):=bool; bool (int iAction)')
apiList.append('CyInterface.shouldShowChangeResearchButton():=bool; bool ()')
apiList.append('CyInterface.shouldShowResearchButtons():=bool; bool ()')
apiList.append('CyInterface.shouldShowSelectionButtons():=bool; bool ()')
apiList.append('CyInterface.shouldShowYieldVisibleButton():=bool; bool ()')
apiList.append('CyInterface.startTimer():=void; void ()')
apiList.append('CyInterface.stop2DSound():=void; void ()')
apiList.append('CyInterface.stopAdvisorSound():=void; void ()')
apiList.append('CyInterface.toggleBareMapMode():=void; void ()')
apiList.append('CyInterface.toggleMusicOn():=void; void ()')
apiList.append('CyInterface.toggleNetStatsVisible():=void; void ()')
apiList.append('CyInterface.toggleScoresVisible():=void; void ()')
apiList.append('CyInterface.toggleYieldVisibleMode():=void; void ()')
apiList.append('CyMessageControl...nonSDK')
apiList.append('CyMessageControl.GetConnState(int iPlayer):=int; int (int iPlayer)')
apiList.append('CyMessageControl.GetFirstBadConnection():=int; int ()')
apiList.append('CyMessageControl.sendApplyEvent(int iContextID, EventContextTypes eContextType, tuple userData):=bool; bool (int iContextID, EventContextTypes eContextType, tuple userData)')
apiList.append('CyMessageControl.sendConvert(ReligionTypes iReligion):=void; void ( int /*ReligionTypes*/ iReligion )')
apiList.append('CyMessageControl.sendPlayerOption(PlayerOptionTypes eOption, bool bValue):=void; void (int /*PlayerOptionTypes*/ eOption, bool bValue)')
apiList.append('CyMessageControl.sendPushOrder(int iCityID, int eOrder, int iData, bool bAlt, bool bShift, bool bCtrl):=void; void (int iCityID, int eOrder, int iData, bool bAlt, bool bShift, bool bCtrl)')
apiList.append('CyMessageControl.sendResearch(int eTech, bool bShift):=void; void (int eTech, bool bShift)')
apiList.append('CyMessageControl.sendUpdateCivics(list iCivics):=void; void (list iCivics)')
#apiList.append('CyPitboss...nonSDK')
#apiList.append('CyPitboss.customMapOptionChanged(??? ???):=???; handles changes made by Pitboss admin to custom map options')
#apiList.append('CyPitboss.downloadPatch(??? ???):=???; downloads the specified patch')
#apiList.append('CyPitboss.gameOptionChanged(??? ???):=???; handles changes made by Pitboss admin to game options')
#apiList.append('CyPitboss.gameParamChanged(??? ???):=???; handles changes made by Pitboss admin to game setup')
#apiList.append('CyPitboss.getCiv(??? ???):=int; int() - returns Civ choice of given row')
#apiList.append('CyPitboss.getCivAt(??? ???):=string; string () - returns the name of the Civ with the given ID')
#apiList.append('CyPitboss.getCivLeaderAt(??? ???):=string; string () - returns the name of the leader with the given index within the given civ')
#apiList.append('CyPitboss.getCivLeaderIndex(??? ???):=int; int() - returns index of Leader choice within its Civ')
#apiList.append('CyPitboss.getClimate(??? ???):=int; int () - returns the index of the chosen climate')
#apiList.append('CyPitboss.getClimateAt(??? ???):=string; string () - returns the name of the climate with the given index')
#apiList.append('CyPitboss.getCustomMapOptionDescAt(??? ???):=string; string () - returns description of this option')
#apiList.append('CyPitboss.getCustomMapOptionName(??? ???):=string; string () - returns the name of this user-defined setting')
#apiList.append('CyPitboss.getDifficulty(??? ???):=int; int() - returns Difficulty choice of given row')
#apiList.append('CyPitboss.getEra(??? ???):=int; int () - returns the index of the chosen era')
#apiList.append('CyPitboss.getEraAt(??? ???):=string; string () - returns the name of the era with the given index')
#apiList.append('CyPitboss.getGameSetupData(??? ???):=PBGameSetupData; PBGameSetupData() - returns structure of game setup data')
#apiList.append('CyPitboss.getGamedate(??? ???):=string; string () - returns the gamedate')
#apiList.append('CyPitboss.getGamename(??? ???):=string; string () - returns the gamename')
#apiList.append('CyPitboss.getGameturn(??? ???):=int; int () - returns the gameturn')
#apiList.append('CyPitboss.getGlobalLeaderIndex(??? ???):=int; int() - returns index of Leader choice within global scope')
#apiList.append('CyPitboss.getHandicapAt(??? ???):=int; string () - returns the name of the Handicap with the given ID')
#apiList.append('CyPitboss.getLeader(??? ???):=int; int() - returns Leader choice of given row')
#apiList.append('CyPitboss.getMPOption(??? ???):=bool; bool () - returns the mp option flag at the given index')
#apiList.append('CyPitboss.getMPOptionDescAt(??? ???):=string; string () - returns the name of the multiplayer option with the given index')
#apiList.append('CyPitboss.getMapName(??? ???):=string; string () - returns the name of the chosen map script')
#apiList.append('CyPitboss.getMapNameAt(??? ???):=string; string () - returns the name of the map with the given index')
#apiList.append('CyPitboss.getName(??? ???):=string; string () - returns Player Name of given row')
#apiList.append('CyPitboss.getNumCivs(??? ???):=int; int () - returns the number of different Civs')
#apiList.append('CyPitboss.getNumClimates(??? ???):=int; int () - returns the number of selectable climates')
#apiList.append('CyPitboss.getNumCustomMapOptionValues(??? ???):=int; int () - returns number of options for this setting')
#apiList.append('CyPitboss.getNumCustomMapOptions(??? ???):=int; int () - returns number of different user-defined settings')
#apiList.append('CyPitboss.getNumEras(??? ???):=int; int () - returns the number of selectable eras')
#apiList.append('CyPitboss.getNumHandicaps(??? ???):=int; int () - returns the number of different Handicaps')
#apiList.append('CyPitboss.getNumLeaders(??? ???):=int; int () - returns the number of leaders for the chosen civ')
#apiList.append('CyPitboss.getNumMPOptions(??? ???):=int; int () - returns the number of different multiplayer options')
#apiList.append('CyPitboss.getNumMapScripts(??? ???):=int; int () - returns the number of selectable map scripts')
#apiList.append('CyPitboss.getNumOptions(??? ???):=int; int () - returns the number of different game options')
#apiList.append('CyPitboss.getNumSeaLevels(??? ???):=int; int () - returns the number of selectable sealevels')
#apiList.append('CyPitboss.getNumSizes(??? ???):=int; int () - returns the number of selectable world sizes')
#apiList.append('CyPitboss.getNumSpeeds(??? ???):=int; int () - returns the number of selectable game speeds')
#apiList.append('CyPitboss.getOption(??? ???):=bool; bool () - returns the option flag at given index')
#apiList.append('CyPitboss.getOptionDescAt(??? ???):=string; string () - returns the name of the option with the given index')
#apiList.append('CyPitboss.getPing(??? ???):=string; string() - gets ping status of given row')
#apiList.append('CyPitboss.getPlayerAdminData(??? ???):=PBPlayerAdminData; PBPlayerAdminData() - returns structure of player admin data of given row')
#apiList.append('CyPitboss.getPlayerSetupData(??? ???):=PBPlayerSetupData; PBPlayerSetupData() - returns structure of player setup data of given row')
#apiList.append('CyPitboss.getReady(??? ???):=bool; bool() - returns Ready status of given row')
#apiList.append('CyPitboss.getScore(??? ???):=string; string() - gets score of given row')
#apiList.append('CyPitboss.getSeaLevel(??? ???):=int; int () - returns the index of the chosen sealevel')
#apiList.append('CyPitboss.getSeaLevelAt(??? ???):=string; string () - returns the name of the sealevel with the given index')
#apiList.append('CyPitboss.getSize(??? ???):=int; int () - returns the index of the chosen world size')
#apiList.append('CyPitboss.getSizeAt(??? ???):=string; string () - returns the name of the world size with the given index')
#apiList.append('CyPitboss.getSpeed(??? ???):=int; int () - returns the index of the chosen game speed')
#apiList.append('CyPitboss.getSpeedAt(??? ???):=string; string () - returns the name of the game speed with the given index')
#apiList.append('CyPitboss.getStatusText(??? ???):=string; string() - returns status text of given row')
#apiList.append('CyPitboss.getTeam(??? ???):=int; int() - returns Team choice of given row')
#apiList.append('CyPitboss.getTurnTimeLeft(??? ???):=int; int () - returns the number of slices left for this turn')
#apiList.append('CyPitboss.getTurnTimer(??? ???):=bool; bool () - returns whether we are using a turn timer')
#apiList.append('CyPitboss.getWho(??? ???):=int; int() - returns Slot Status of given row')
#apiList.append('CyPitboss.handleMessages(??? ???):=???; handles incoming network messages')
#apiList.append('CyPitboss.host(??? ???):=bool; bool () - attempt to create a network game')
#apiList.append('CyPitboss.isClaimed(??? ???):=bool; bool() - returns whether civ has been claimed')
#apiList.append('CyPitboss.isHuman(??? ???):=bool; bool() - returns whether player is human')
#apiList.append('CyPitboss.kick(??? ???):=???; removes a player from the game')
#apiList.append('CyPitboss.launch(??? ???):=???; launches the game')
#apiList.append('CyPitboss.load(??? ???):=bool; bool () - loads setup information for a saved game')
#apiList.append('CyPitboss.login(??? ???):=bool; bool () - attempts login to GameSpy, returns result')
#apiList.append('CyPitboss.logout(??? ???):=???; logs out of GameSpy')
#apiList.append('CyPitboss.mpOptionChanged(??? ???):=???; handles changes made by Pitboss admin to multiplayer options')
#apiList.append('CyPitboss.playerParamChanged(??? ???):=???; handles changes made by Pitboss admin to player setup')
#apiList.append('CyPitboss.quit(??? ???):=???; quits the game')
#apiList.append('CyPitboss.reset(??? ???):=???; resets the network resources')
#apiList.append('CyPitboss.save(??? ???):=???; bool () - attempt to save a game')
#apiList.append('CyPitboss.sendChat(??? ???):=???; sends a chat message to everyone')
#apiList.append('CyPitboss.setGamename(??? ???):=???; sets the gamename in the init structure')
#apiList.append('CyPitboss.setLoadFileName(??? ???):=???; sets the filename to load in the init structure')
#apiList.append('CyPitboss.suggestPlayerSetup(??? ???):=???; Suggests number of players based on world size')
apiList.append('CyPopup...nonSDK')
apiList.append('CyPopup.addButton(std::wstring szText):=void; void ( wstring szText )')
apiList.append('CyPopup.addButtonXY(std::wstring szText, int iX, int iY):=void; void ( wstring szText, int iX, int iY )')
apiList.append('CyPopup.addDDS(std::string szPathName, int iX, int iY, int iWidth, int iHeight):=void; void ( string szPathName, int iX, int iY, int iWidth, int iHeight )')
apiList.append('CyPopup.addFixedSeparator(int iSpace):=void; void ( int iSpace )')
apiList.append('CyPopup.addLeaderhead(std::string  szPathName, int eWho, int eInitAttitude, int iX, int iY):=void; void ( string  szPathName, int eWho, int eInitAttitude, int iX, int iY )')
apiList.append('CyPopup.addListBoxString(std::wstring szText, int iID, int iGroup):=void; void ( wstring szText, int iID, int iGroup )')
apiList.append('CyPopup.addPullDownString(std::wstring szText, int iID, int iGroup):=void; void ( wstring szText, int iID, int iGroup )')
apiList.append('CyPopup.addPythonButton(std::string szFunctionName, std::wstring szBtnText, std::wstring szHelpText, std::string szArtFile, int iData1, int iData2, bool bOption):=void; void ( string szFunctionName, wstring szBtnText, wstring szHelpText, string szArtFile, int iData1, int iData2, bool bOption )')
apiList.append('CyPopup.addPythonButtonXY(std::string szFunctionName, std::wstring szBtnText, std::wstring szHelpText, std::string szArtFile, int iData1, int iData2, bool bOption, int iX, int iY):=void; void ( string szFunctionName, wstring szBtnText, wstring szHelpText, string szArtFile, int iData1, int iData2, bool bOption, int iX, int iY )')
apiList.append('CyPopup.addPythonDDS(std::string szPathName, std::wstring szText, int iX, int iY, int iWidth, int iHeight):=void; void ( string szPathName, wstring szText, int iX, int iY, int iWidth, int iHeight )')
apiList.append('CyPopup.addSeparator():=void; void ( )')
apiList.append('CyPopup.addTableCellDDS(int iRow, int iCol, std::string szFile, int iX, int iY, int iWidth, int iHeight, int iGroup):=void; void ( int iRow, int iCol, string szFile, int iX, int iY, int iWidth, int iHeight, int iGroup )')
apiList.append('CyPopup.addTableCellImage(int iRow, int iCol, std::string szFile, int iGroup):=void; void ( int iRow, int iCol, string szFile, int iGroup )')
apiList.append('CyPopup.addTableCellText(int iRow, int iCol, std::wstring szText, int iGroup):=void; void ( int iRow, int iCol, wstring szText, int iGroup )')
apiList.append('CyPopup.completeTableAndAttach(int iGroup):=void; void ( int iGroup )')
apiList.append('CyPopup.completeTableAndAttachXY(int iGroup, int iX, int iY):=void; void ( int iGroup, int iX, int iY )')
apiList.append('CyPopup.createCheckBoxes(int iNumBoxes, int iGroup):=void; void ( int iNumBoxes, int iGroup )')
apiList.append('CyPopup.createEditBox(std::wstring szText, int iGroup):=void; void (wstring szText, int iGroup)')
apiList.append('CyPopup.createEditBoxXY(std::wstring szText, int iGroup, int iX, int iY):=void; void (wstring szText, int iGroup, int iX, int iY)')
apiList.append('CyPopup.createListBox(int iGroup):=void; void ( int iGroup )')
apiList.append('CyPopup.createListBoxXY(int iGroup, int iX, int iY):=void; void ( int iGroup, int iX, int iY )')
apiList.append('CyPopup.createPullDown(int iGroup):=void; void ( int iGroup )')
apiList.append('CyPopup.createPullDownXY(int iGroup, int iX, int iY):=void; void ( int iGroup, int iX, int iY )')
apiList.append('CyPopup.createPythonCheckBoxes(int iNumBoxes, int iGroup):=void; void ( int iNumBoxes, int iGroup )')
apiList.append('CyPopup.createPythonEditBox(std::wstring szText, std::wstring szHelpText, int iGroup):=void; void (wstring szText, wstring szHelpText, int iGroup)')
apiList.append('CyPopup.createPythonEditBoxXY(std::wstring szText, std::wstring szHelpText, int iGroup, int iX, int iY):=void; void (wstring szText, wstring szHelpText, int iGroup, int iX, int iY)')
apiList.append('CyPopup.createPythonListBox(std::wstring szText, int iGroup):=void; void ( wstring szText, int iGroup )')
apiList.append('CyPopup.createPythonListBoxXY(std::wstring szText, int iGroup, int iX, int iY):=void; void ( wstring szText, int iGroup, int iX, int iY )')
apiList.append('CyPopup.createPythonPullDown(std::wstring szText, int iGroup):=void; void ( wstring szText, int iGroup )')
apiList.append('CyPopup.createPythonPullDownXY(std::wstring szText, int iGroup, int iX, int iY):=void; void ( wstring szText, int iGroup, int iX, int iY )')
apiList.append('CyPopup.createPythonRadioButtons(int iNumButtons, int iGroup):=void; void ( int iNumButtons, int iGroup )')
apiList.append('CyPopup.createRadioButtons(int iNumButtons, int iGroup):=void; void ( int iNumButtons, int iGroup )')
apiList.append('CyPopup.createSpinBox(int iIndex, std::wstring szHelpText, int iDefault, int iIncrement, int iMax, int iMin):=void; void ( int iIndex, wstring szHelpText, int iDefault, int iIncrement, int iMax, int iMin )')
apiList.append('CyPopup.createTable(int iRows, int iCols, int iGroup):=void; void ( int iRows, int iCols, int iGroup )')
apiList.append('CyPopup.isNone():=bool; bool () - returns whether this is a valid CyPopup instance')
apiList.append('CyPopup.launch(bool bCreateOK, PopupStates eState):=bool; bool (bool bCreateOK, PopupStates eState')
apiList.append('CyPopup.setBodyString(std::wstring szText, uint uiFlags):=void; void ( wstring szText, uint uiFlags )')
apiList.append('CyPopup.setCheckBoxText(int iCheckBoxID, std::wstring szText, int iGroup):=void; void ( int iCheckBoxID, wstring szText, int iGroup )')
apiList.append('CyPopup.setEditBoxMaxCharCount(int maxCharCount, int preferredCharCount, int iGroup):=void; void (int maxCharCount, int preferredCharCount, int iGroup )')
apiList.append('CyPopup.setHeaderString(std::wstring szText, uint uiFlags):=void; void ( wstring szText, uint uiFlags )')
apiList.append('CyPopup.setPosition(int iX, int iY):=void; void (int iX, int iY)')
apiList.append('CyPopup.setPythonBodyString(std::wstring szDefText, std::string szName, std::wstring szText, uint uiFlags):=void; void ( wstring szDefText, string szName, wstring szText, uint uiFlags )')
apiList.append('CyPopup.setPythonCheckBoxText(int iCheckBoxID, std::wstring szText, std::wstring szHelpText, int iGroup):=void; void ( int iCheckBoxID, wstring szText, wstring szHelpText, int iGroup )')
apiList.append('CyPopup.setPythonRadioButtonText(int iRadioButtonID, std::wstring szText, std::wstring szHelpText, int iGroup):=void; void ( int iRadioButtonID, wstring szText, wstring szHelpText, int iGroup )')
apiList.append('CyPopup.setRadioButtonText(int iRadioButtonID, std::wstring szText, int iGroup):=void; void ( int iRadioButtonID, wstring szText, int iGroup )')
apiList.append('CyPopup.setSelectedListBoxString(int iID, int iGroup):=void; void ( int iID, int iGroup )')
apiList.append('CyPopup.setSelectedPulldownID(int iID, int iGroup):=void; void ( int iID, int iGroup )')
apiList.append('CyPopup.setSize(int iXS, int iYS):=void; void (int iXS, int iYS)')
apiList.append('CyPopup.setTableCellSize(int iCol, int iPixels, int iGroup):=void; void ( int iCol, int iPixels, int iGroup )')
apiList.append('CyPopup.setTableYSize(int iRow, int iSize, int iGroup):=void; void ( int iRow, int iSize, int iGroup )')
apiList.append('CyPopup.setTimer(unsigned int uiTime):=void; void (unsigned int uiTime)')
apiList.append('CyPopup.setUserData(tuple userData):=void; void (tuple userData)')
apiList.append('CyPopupInfo...nonSDK')
apiList.append('CyPopupInfo.addPopup(int iPlayer):=void; void (int iPlayer)')
apiList.append('CyPopupInfo.addPythonButton(std::wstring szText, std::string szArt):=void; void (wstring szText, string szArt)')
apiList.append('CyPopupInfo.getButtonPopupType():=ButtonPopupTypes; ButtonPopupTypes ()')
apiList.append('CyPopupInfo.getData1():=int; int ()')
apiList.append('CyPopupInfo.getData2():=int; int ()')
apiList.append('CyPopupInfo.getData3():=int; int ()')
apiList.append('CyPopupInfo.getFlags():=int; int ()')
apiList.append('CyPopupInfo.getNumPythonButtons():=int; int ()')
apiList.append('CyPopupInfo.getOnClickedPythonCallback():=std::string; string ()')
apiList.append('CyPopupInfo.getOnFocusPythonCallback():=std::string; string ()')
apiList.append('CyPopupInfo.getOption1():=bool; bool ()')
apiList.append('CyPopupInfo.getOption2():=bool; bool ()')
apiList.append('CyPopupInfo.getPythonButtonArt():=std::string; string ()')
apiList.append('CyPopupInfo.getPythonButtonText():=std::string; wstring ()')
apiList.append('CyPopupInfo.getText():=std::string; wstring ()')
apiList.append('CyPopupInfo.isNone():=bool; bool () - returns whether this is a valid CyPopupInfo instance')
apiList.append('CyPopupInfo.setButtonPopupType(ButtonPopupTypes eValue):=void; void (ButtonPopupTypes eValue)')
apiList.append('CyPopupInfo.setData1(int iValue):=void; void (int iValue)')
apiList.append('CyPopupInfo.setData2(int iValue):=void; void (int iValue)')
apiList.append('CyPopupInfo.setData3(int iValue):=void; void (int iValue)')
apiList.append('CyPopupInfo.setFlags(int iValue):=void; void (int iValue)')
apiList.append('CyPopupInfo.setOnClickedPythonCallback(std::string szOnFocus):=void; void (string szOnFocus)')
apiList.append('CyPopupInfo.setOnFocusPythonCallback(std::string szOnFocus):=void; void (string szOnFocus)')
apiList.append('CyPopupInfo.setOption1(bool bValue):=void; void (bool bValue)')
apiList.append('CyPopupInfo.setOption2(bool bValue):=void; void (bool bValue)')
apiList.append('CyPopupInfo.setText(std::string szText):=void; void (string szText)')
apiList.append('CyPopupReturn...nonSDK')
apiList.append('CyPopupReturn.getButtonClicked(int iGroup):= int; int (int iGroup)')
apiList.append('CyPopupReturn.getEditBoxString(int iGroup):= std::wstring; wstring (int iGroup)')
apiList.append('CyPopupReturn.getSelectedListBoxValue(int iGroup):= int; int (int iGroup)')
apiList.append('CyPopupReturn.getSelectedPullDownValue(int iGroup):= int; int (int iGroup)')
apiList.append('CyPopupReturn.getSelectedRadioButton(int iGroup):= int; int (int iGroup)')
apiList.append('CyPopupReturn.getSpinnerWidgetValue(int iGroup):= int; int (int iGroup)')
apiList.append('CyPopupReturn.isNone():=bool; bool () - returns whether this is a valid CyPopupReturn instance')
apiList.append('CyPythonMgr...nonSDK')
apiList.append('CyPythonMgr.allowDefaultImpl():=void;')
apiList.append('CyPythonMgr.debugMsg(std::string msg):=void;')
apiList.append('CyPythonMgr.debugMsgWide(std::string msg):=void;')
apiList.append('CyPythonMgr.errorMsg(std::string msg):=void;')
apiList.append('CyPythonMgr.errorMsgWide(std::string msg):=void;')
apiList.append('CySign...nonSDK')
apiList.append('CySign.getCaption():=std::wstring; wstring getCaption()')
apiList.append('CySign.getPlayerType():=PlayerTypes; PlayerTypes getPlayerType()')
apiList.append('CySign.getPlot():=CyPlot; CyPlot getPlot()')
apiList.append('CyStatistics...nonSDK')
apiList.append('CyStatistics.getPlayerNumBuildingsBuilt(int iPlayerID, int iBuildingID):=int; int (int iPlayerID, int iBuildingID)')
apiList.append('CyStatistics.getPlayerNumCitiesBuilt(int iPlayerID):=int; int (int iPlayerID)')
apiList.append('CyStatistics.getPlayerNumCitiesRazed(int iPlayerID):=int; int (int iPlayerID)')
apiList.append('CyStatistics.getPlayerNumGoldenAges(int iPlayerID):=int; int (int iPlayerID)')
apiList.append('CyStatistics.getPlayerNumUnitsBuilt(int iPlayerID, int iUnitID):=int; int (int iPlayerID, int iUnitID)')
apiList.append('CyStatistics.getPlayerNumUnitsKilled(int iPlayerID, int iUnitID):=int; int (int iPlayerID, int iUnitID)')
apiList.append('CyStatistics.getPlayerNumUnitsLost(int iPlayerID, int iUnitID):=int; int (int iPlayerID, int iUnitID)')
apiList.append('CyStatistics.getPlayerReligionFounded(int iPlayerID, int iReligionID):=bool; bool (int iPlayerID, int iReligionID)')
apiList.append('CyStatistics.getPlayerTimePlayed(int iPlayerID):=int; int (int iPlayerID) - Returns the amount of time player iPlayerID has played this game for; note that this is only set at the end of the game and will return 0 during a game - use CyGame().getMinutesPlayed() instead')
apiList.append('CyTranslator...nonSDK')
apiList.append('CyTranslator.changeTextColor(std::string szText, int iColor):=std::string; string (string szText, int iColor)')
apiList.append('CyTranslator.getColorText(std::string szTag, tuple args, int iColor):=std::string; string (string szTag, tuple args, int iColor)')
apiList.append('CyTranslator.getObjectText(std::string szTag, int i):=std::string; string (string szTag, int)')
apiList.append('CyTranslator.getText(std::string szTag, tuple args):=std::string; string (string szTag, tuple args)')
apiList.append('CyTranslator.stripHTML(std::string szText):=std::string; string (string szText)')
apiList.append('CyUnitEntity...nonSDK')
apiList.append('CyUnitEntity.GetSubEntity(uint i):=CyUnitSubEntity; CyUnitSubEntitty * GetSubEntity(uint) - Returns the CySubUnitEntity at the given index')
apiList.append('CyUnitEntity.GetSubEntityCount():=uint; uint GetSubEntityCount() - Returns the number of CyUnitSubEntitys in this unit')
apiList.append('CyUnitEntity.GetUnitsCurrentlyAlive():=int; int GetUnitsCurrentlyAlive() - Returns the number of sub-units that are alive')
apiList.append('CyUnitEntity.MoveTo(int x, int y, int z, int rad):=void; void MoveTo(x, y, z, rad) - Moves the unit to the given position')
apiList.append('CyUnitEntity.NotifyEntity(int e):=void; void NotifyEntity(int) - Notifies this entity of the given event')
apiList.append('CyUnitEntity.getScale():=float; float ()')
apiList.append('CyUnitEntity.getUnit():=CyUnit; CyUnit * getUnit() - Returns the CyUnit associated with this CyUnitEntity')
apiList.append('CyUnitEntity.isNone():=bool; bool isNone() - Is this instance valid?')
apiList.append('CyUnitEntity.setScale(float fScale):=void; void (float fScale)')
apiList.append('CyUnitSubEntity...nonSDK')
apiList.append('CyUnitSubEntity.PlayAnimationPath(int i):=void; void PlayAnimationPath(int) - Plays the given animation path')
apiList.append('CyUnitSubEntity.isNone():=bool; bool isNone() - Is this instance valid?')
apiList.append('CyUnitSubEntity.setUnitShadow(bool b):=void; void setUnitShadow(bool) - shows/hides a sub-unit\'s shadow')
apiList.append('CyUnitSubEntity.setVisible(bool b):=void; void setVisible(bool) - shows/hides a sub-unit')
apiList.append('CyUserProfile...nonSDK')
apiList.append('CyUserProfile.deleteProfileFile(string szNewName):=bool; bool (string szNewName) - Deletes the file (no extension) in Civ4\\Profiles\\ IF it exists - returns whether or not a file actually was deleted')
apiList.append('CyUserProfile.getAmbienceVolume():=int; int () - returns the Ambience volume level')
apiList.append('CyUserProfile.getAntiAliasing():=int; int () - returns the number of Anti-Aliasing MultiSamples level currently enabled')
apiList.append('CyUserProfile.getAntiAliasingMaxMultiSamples():=int; int () - return the number of Anti-Aliasing MultiSamples availble on the video card')
apiList.append('CyUserProfile.getCaptureDeviceDesc(int iIndex):=string; string (int) - returns name of capture device at provided index')
apiList.append('CyUserProfile.getCaptureDeviceIndex():=int; int () - returns the index of currently selected capture device')
apiList.append('CyUserProfile.getCaptureVolume():=int; int () - returns current capture volume')
apiList.append('CyUserProfile.getCurrentVersion():=int; int () - Returns the current version of the user profile system in place')
apiList.append('CyUserProfile.getGlobeViewRenderLevel():=int; int () - returns the globe view render level')
apiList.append('CyUserProfile.getGraphicOption(int i):=bool; bool (int i) - returns value of option i')
apiList.append('CyUserProfile.getGraphicsLevel():=int; int () - returns the graphics quality level')
apiList.append('CyUserProfile.getInterfaceVolume():=int; int () - returns the Interface volume level')
apiList.append('CyUserProfile.getMasterVolume():=int; int () - returns the Master volume level')
apiList.append('CyUserProfile.getMaxCaptureVolume():=int; int () - returns max range of capture volume')
apiList.append('CyUserProfile.getMaxPlaybackVolume():=int; int () - returns max range of Playback volume')
apiList.append('CyUserProfile.getMusicPath():=string; string () - Returns the current custom music folder path (blank if no path set)')
apiList.append('CyUserProfile.getMusicVolume():=int; int () - returns the music volume level')
apiList.append('CyUserProfile.getNumCaptureDevices():=int; int () - returns number of available voice capture devices')
apiList.append('CyUserProfile.getNumPlaybackDevices():=int; int () - returns number of available voice Playback devices')
apiList.append('CyUserProfile.getNumProfileFiles():=int; uint () - Returns the number of .prf files in the the Civ4\\Profiles\\ directory')
apiList.append('CyUserProfile.getPlaybackDeviceDesc(int iIndex):=std::string; string (int) - returns name of Playback device at provided index')
apiList.append('CyUserProfile.getPlaybackDeviceIndex():=int; int () - returns the index of currently selected Playback device')
apiList.append('CyUserProfile.getPlaybackVolume():=int; int () - returns current Playback volume')
apiList.append('CyUserProfile.getPlayerOption(int i):=bool; bool (int i) - returns value of option i')
apiList.append('CyUserProfile.getProfileFileName(int iFileID):=string; string (int iFileID) - Returns the name of the file associated with iFileID')
apiList.append('CyUserProfile.getProfileName():=string; string () - Returns the name of the current profile')
apiList.append('CyUserProfile.getProfileVersion():=int; int () - Returns the version number of the active profile')
apiList.append('CyUserProfile.getRenderQualityLevel():=int; int () - returns the render Quality level')
apiList.append('CyUserProfile.getResolution():=int; int () - returns the Resolution option currently enabled')
apiList.append('CyUserProfile.getResolutionMaxModes():=int; int () - returns the number of supported resolutions')
apiList.append('CyUserProfile.getResolutionString(int iResolution):=std::string; std::string (int iResolution) - returns the resolution string for the associated resolution index')
apiList.append('CyUserProfile.getSoundEffectsVolume():=int; int () - returns the sound effects volume level')
apiList.append('CyUserProfile.getSpeakerConfig():=string; string () - returns the name of the currently active Speaker Configuration')
apiList.append('CyUserProfile.getSpeakerConfigFromList(int iIndex):=string; string (int iIndex) - returns the speaker configuration associated with iIndex')
apiList.append('CyUserProfile.getSpeechVolume():=int; int () - returns the Speech volume level')
apiList.append('CyUserProfile.getVolumeStops():=int; int () - returns the number of stops that should be available for each volume slider')
apiList.append('CyUserProfile.is24Hours():=bool; bool () - is the 24 hour system enabled?')
apiList.append('CyUserProfile.isAmbienceNoSound():=bool; bool () - returns whether or not Ambience sound is disabled')
apiList.append('CyUserProfile.isClockOn():=bool; bool () - is the clock on?')
apiList.append('CyUserProfile.isInterfaceNoSound():=bool; bool () - returns whether or not Interface sound is disabled')
apiList.append('CyUserProfile.isMasterNoSound():=bool; bool () - returns whether or not Master sound is disabled')
apiList.append('CyUserProfile.isMusicNoSound():=bool; bool () - returns whether or not Music sound is disabled')
apiList.append('CyUserProfile.isProfileFileExist(string szNewName):=bool; bool (string szNewName) - Returns whether or not szFileName (no extension) exists in Civ4\\Profiles\\')
apiList.append('CyUserProfile.isSoundEffectsNoSound():=bool; bool () - returns whether or not SoundEffects sound is disabled')
apiList.append('CyUserProfile.isSpeechNoSound():=bool; bool () - returns whether or not Speech sound is disabled')
apiList.append('CyUserProfile.loadProfileFileNames():=void; void - Recalculates the list of Profile files that exist')
apiList.append('CyUserProfile.musicPathDialogBox():=void; void () - Brings up a dialog box which is used to allow the user to set a custom music directory)')
apiList.append('CyUserProfile.readFromFile(string szFileName):=bool; bool (string szFileName) - Reads the CvUserProfile data from file szFileName; returns whether or not the read was successful')
apiList.append('CyUserProfile.recalculateAudioSettings():=void; void () - enacts audio setting members to the audio system')
apiList.append('CyUserProfile.resetOptions(TabGroupTypes resetTab):=void; void (TabGroupTypes resetTab) - Resets the options to default (Tabgroup type - use NOTABGROUP to reset all user profile data')
apiList.append('CyUserProfile.set24Hours(bool bValue):=void; void (bool bValue) - set the 24 hour system to state bValue')
apiList.append('CyUserProfile.setAmbienceNoSound(bool b):=void; void (bool b) - sets whether or not Ambience sound is disabled')
apiList.append('CyUserProfile.setAmbienceVolume(int i):=void; void (int i) - sets the Ambience volume to i')
apiList.append('CyUserProfile.setAntiAliasing(int i):=void; void (int i) - sets the Anti-Aliasing MultiSamples level currently enabled to i')
apiList.append('CyUserProfile.setCaptureDevice(int device):=void; void (int) - selects a capture device')
apiList.append('CyUserProfile.setCaptureVolume(int volume):=void; void (int) - sets capture volume')
apiList.append('CyUserProfile.setClockJustTurnedOn(bool bValue):=void; void (bool bValue) - set clock just turned on to state bValue')
apiList.append('CyUserProfile.setClockOn(bool bValue):=void; void (bool bValue) - set the clock to state bValue')
apiList.append('CyUserProfile.setGlobeViewRenderLevel(int level):=void; void (int level) - sets the globe view render level')
apiList.append('CyUserProfile.setGraphicOption(int i, bool b):=void; void (int i, bool b) - sets the value of option i to b')
apiList.append('CyUserProfile.setGraphicsLevel(int i):=void; void (int i) - sets the Graphics quality to i')
apiList.append('CyUserProfile.setInterfaceNoSound(bool b):=void; void (bool b) - sets whether or not Interface sound is disabled')
apiList.append('CyUserProfile.setInterfaceVolume(int i):=void; void (int i) - sets the Interface volume to i')
apiList.append('CyUserProfile.setMasterNoSound(bool b):=void; void (bool b) - sets whether or not Master sound is disabled')
apiList.append('CyUserProfile.setMasterVolume(int i):=void; void (int i) - sets the Master volume to i')
apiList.append('CyUserProfile.setMusicNoSound(bool b):=void; void (bool b) - sets whether or not Music sound is disabled')
apiList.append('CyUserProfile.setMusicPath(string szMusicPath):=void; void (string szMusicPath) - sets the custom music folder path')
apiList.append('CyUserProfile.setMusicVolume(int i):=void; void (int i) - sets the music volume to i')
apiList.append('CyUserProfile.setPlaybackDevice(int device):=void; void (int) - selects a Playback device')
apiList.append('CyUserProfile.setPlaybackVolume(int volume):=void; void (int) - sets Playback volume')
apiList.append('CyUserProfile.setProfileName(string szNewName):=void; void (string szNewName) - Assigns the internal UserProfile name to szNewName')
apiList.append('CyUserProfile.setRenderQualityLevel(int level):=void; void (int level) - sets the render Quality level')
apiList.append('CyUserProfile.setResolution(int i):=void; void (int i) - sets the Resolution option currently enabled to i')
apiList.append('CyUserProfile.setSoundEffectsNoSound(bool b):=void; void (bool b) - sets whether or not SoundEffects sound is disabled')
apiList.append('CyUserProfile.setSoundEffectsVolume(int i):=void; void (int i) - sets the sound effects volume to i')
apiList.append('CyUserProfile.setSpeakerConfig(string szConfigName):=void; void (string szConfigName) - sets the Speaker Configuration to szConfigName if it is a valid choice')
apiList.append('CyUserProfile.setSpeechNoSound(bool b):=void; void (bool b) - sets whether or not Speech sound is disabled')
apiList.append('CyUserProfile.setSpeechVolume(int i):=void; void (int i) - sets the Speech volume to i')
apiList.append('CyUserProfile.setUseVoice(bool b):=void; void (bool) - sets whether to use voice capture/playback')
apiList.append('CyUserProfile.useVoice():=bool; bool () - returns whether or not to use voice capture/playback')
apiList.append('CyUserProfile.wasClockJustTurnedOn():=bool; - bool () - was the clock just turned on?')
apiList.append('CyUserProfile.writeToFile(string szFileName):=void; void (string szFileName) - Writes the CvUserProfile data to file szFileName')
apiList.append('CyVariableSystem...nonSDK')
apiList.append('CyVariableSystem.getFirstVariableName():=std::string; std::string getFirstVariableName( )')
apiList.append('CyVariableSystem.getNextVariableName():=std::string; std::string getNextVariableName( )')
apiList.append('CyVariableSystem.getValueFloat(TCHAR * szVarName):=float; float getValueFloat( TCHAR * szVarName )')
apiList.append('CyVariableSystem.getValueInt(TCHAR * szVarName):=int; int getValueInt( TCHAR * szVarName )')
apiList.append('CyVariableSystem.getValueString(TCHAR * szVarName):=std::string; std::string getValueString( TCHAR * szVarName )')
apiList.append('CyVariableSystem.getVariableType(TCHAR * szVariable):=std::string; std::string getVariableType( TCHAR * szVariable )')
apiList.append('CyVariableSystem.isNone():=bool; bool isNone() - Is this instance valid?')
apiList.append('CyVariableSystem.setValueFloat(TCHAR* szVarName, float fValue):=void; setValueFloat( TCHAR * szVarName, float fValue )')
apiList.append('CyVariableSystem.setValueInt(TCHAR* szVarName, int iValue):=void; setValueInt( TCHAR * szVarName, int iValue )')
apiList.append('CyVariableSystem.setValueString(TCHAR* szVarName, TCHAR* szValue):=void; setValueString( TCHAR * szVarName, TCHAR * szValue )')
apiList.append('NiMatrix3...nonSDK')
apiList.append('NiMatrix3.GetEntry(int uiRow, int uiCol):=float; float GetEntry(unsigned int uiRow, unsigned int uiCol)')
apiList.append('NiMatrix3.MakeIdentity():=void; void MakeIdentity()')
apiList.append('NiMatrix3.SetEntry(int uiRow, int uiCol, float fEntry):=void; void SetEntry(unsigned int uiRow, unsigned int uiCol, float fEntry)')
apiList.append('POINT...nonSDK')
apiList.append('POINT..ATTR::x:=int;')
apiList.append('POINT..ATTR::y:=int; helptext')
apiList.append('CvArtInfoAsset.getButton():=std::string; string ()')
apiList.append('CvArtInfoAsset.setButton(std::string szVal):=void; void (string)')
apiList.append('CvArtInfoUnit.getInterfaceScale():=float; float ()')
#apiList.append('CvBonusClassInfo..ATTR::getUniqueRange:=int;')
apiList.append('CvBuildingInfo.getHotKey():=std::string; string ()')
apiList.append('CvBuildingInfo.getHotKeyDescription():=std::string; string ()')
apiList.append('CvControlInfo.getActionInfoIndex():=int; int ()')
apiList.append('CvPromotionInfo.getActionInfoIndex():=int; int ()')
apiList.append('CyCity.getOriginalOwner():=PlayerTypes; int /* PlayerTypes*/ ()')
apiList.append('CyCity.getOwner():=PlayerTypes; int /* PlayerTypes*/ ()')
apiList.append('CyCity.getPreviousOwner():=PlayerTypes; int /* PlayerTypes*/ ()')
apiList.append('CyCity.getTeam():=TeamTypes; int /* TeamTypes*/ ()')

#-------------------------------------------------------------------------------------- 
if iVersion < 200:	# Original only; obsolete in Warlords and BTS
	# Class members which are no longer available
	apiList.append('CyInterfaceScreen.addFlagWidget(??? ???):=???;')
	apiList.append('CyInterfaceScreen.addGraphData(??? ???):=???;')
	apiList.append('CyInterfaceScreen.addGraphLayer(??? ???):=???;')
	apiList.append('CyInterfaceScreen.addGraphWidget(??? ???):=???;')
	apiList.append('CyInterfaceScreen.addStackedBar(??? ???):=???;')
	apiList.append('CyInterfaceScreen.clearGraphData(??? ???):=???;')
	apiList.append('CyInterfaceScreen.deleteWidget(??? ???):=???;')
	apiList.append('CyInterfaceScreen.enable(??? ???):=???;')
	apiList.append('CyInterfaceScreen.getCurrentTime(??? ???):=???;')
	apiList.append('CyInterfaceScreen.hideList(??? ???):=???;')
	apiList.append('CyInterfaceScreen.hideRange(??? ???):=???;')
	apiList.append('CyInterfaceScreen.isRequiredForcedRedraw(??? ???):=???;')
	apiList.append('CyInterfaceScreen.minimapClearAllFlashingTiles(??? ???):=???;')
	apiList.append('CyInterfaceScreen.minimapFlashPlot(??? ???):=???;')
	apiList.append('CyInterfaceScreen.modifyWidgetData(??? ???):=???;')
	apiList.append('CyInterfaceScreen.registerHideList(??? ???):=???;')
	apiList.append('CyInterfaceScreen.resizeBorderedPane(??? ???):=???;')
	apiList.append('CyInterfaceScreen.resizePane(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setBarPercentage(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setDataElement(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setForcedRedraw(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setGraphGrid(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setGraphLabelX(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setGraphLabelY(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setGraphXDataRange(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setGraphYDataRange(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setHelpTextString(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setLeftText(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setMainInterface(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setMinimapColor(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setMinimapMap(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setMinimapNoRender(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setPassThru(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setPulsing(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setRightText(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setSound(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setStackedBarColors(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setStackedBarColorsAlpha(??? ???):=???;')
	apiList.append('CyInterfaceScreen.setTextBackgroundPane(??? ???):=???;')
	apiList.append('CyInterfaceScreen.showRange(??? ???):=???;')
	apiList.append('CyInterfaceScreen.updateMinimapColorFromMap(??? ???):=???;')
	apiList.append('CyInterfaceScreen.updateMinimapVisibility(??? ???):=???;')

#-------------------------------------------------------------------------------------- 
if iVersion >= 200:	# Warlords only, don't display these for the original game API
	# Class members which are completely new
	apiList.append('CyDiplomacy.theirVassalTribute():=bool; bool ()')
	apiList.append('CyGInterfaceScreen.markRenderTexturesDirty():=void; void ()')
	apiList.append('CyGInterfaceScreen.setHelpLabel(string szName, string szAtttachTo, std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, std::wstring szHelpText):=void; void ( string szName, string szAtttachTo, wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, wstring szHelpText )')
	apiList.append('CyInterface.getPlotListOffset():=int; int ()')
	apiList.append('CyInterface.isOneCitySelected():=bool; bool ()')
	apiList.append('CyInterface.setSoundSelectionReady(bool bReady):=void; void (bool)')

#-------------------------------------------------------------------------------------- 
if iVersion < 300:	# Original and Warlords only; obsolete in BTS
	# Class members which are no longer available
	apiList.append('CyGInterfaceScreen.addBonusGraphic(std::string szName, std::string szAttachTo, int iBonus, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void (string szName, string szAttachTo, int iBonus, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyGInterfaceScreen.addBorderedPane(std::string szName, std::string szAttachTo, std::string szArtFile, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, string szArtFile, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addBuildingGraphic(std::string szName, std::string szAttachTo, int iBuilding, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void (string szName, string szAttachTo, int iBuilding, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyGInterfaceScreen.addDDS(std::string szName, std::string szAttachTo, std::string szFile, float fX, float fY, float fZ, float fWidth, float fHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( std::string szName, std::string szAttachTo, std::string szFile, float fX, float fY, float fZ, float fWidth, float fHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addDropDownBox(std::string szName, std::string szAttachTo, std::string szUpperListBoxFile, std::string szLowerListBoxFile, std::string szDropButtonFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, std::string szUpperBounds, std::string szLowerBounds, FontTypes eFont):=void; void ( string szName, string szAttachTo, string szUpperListBoxFile, string szLowerListBoxFile, string szDropButtonFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, string szUpperBounds, string szLowerBounds, FontTypes eFont )')
	apiList.append('CyGInterfaceScreen.addEditBox(std::string szName, std::string szAttachTo, std::string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, std::string szTextField, std::string szCaret, FontTypes eFont):=void; void ( string szName, string szAttachTo, string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, string szTextField, string szCaret, FontTypes eFont )')
	apiList.append('CyGInterfaceScreen.addFlagWidget(std::string szName, std::string szAttachTo, std::string szFile, int iOwner, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, float fScale):=void; void ( string szName, string szAttachTo, string szFile, int iOwner, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, float fScale )')
	apiList.append('CyGInterfaceScreen.addGraphic(std::string szName, std::string szAttachTo, std::string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addImprovementGraphic(std::string szName, std::string szAttachTo, int iImprovement, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void (string szName, string szAttachTo, int iImprovement, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyGInterfaceScreen.addLeaderhead(std::string  szName, std::string  szAttachTo, int eWho, int eInitAttitude, float fX, float fY, float fZ, float fScale, WidgetTypes eWidget, int iData1, int iData2):=void; void ( string  szName, string  szAttachTo, int eWho, int eInitAttitude, float fX, float fY, float fZ, float fScale, WidgetTypes eWidget, int iData1, int iData2)')
	apiList.append('CyGInterfaceScreen.addLine(std::string szName, std::string szAttachTo, float fXStart, float fYStart, float fXEnd, float fYEnd, float fZ, float fWidth, int eColor, WidgetTypes eType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, float fXStart, float fYStart, float fXEnd, float fYEnd, float fZ, float fWidth, int eColor, WidgetTypes eType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addListBox(std::string szName, std::string szAttachTo, std::string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, std::string szTextBounds, FontTypes eFont):=void; void ( string szName, string szAttachTo, string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, string szTextBounds, FontTypes eFont )')
	apiList.append('CyGInterfaceScreen.addListBoxString(std::string szName, std::wstring szString, int iID):=void; void ( string szName, wstring szString, int iID )')
	apiList.append('CyGInterfaceScreen.addPane(std::string szName, std::string szAttachTo, float fX, float fY, float fZ, float fWidth, float fHeight, int eColor, WidgetTypes eWidgetType, int iData1, int iData2, bool bPassThru):=void; void ( string szName, string szAttachTo, float fX, float fY, float fZ, float fWidth, float fHeight, int eColor, WidgetTypes eWidgetType, int iData1, int iData2, bool bPassThru )')
	apiList.append('CyGInterfaceScreen.addPlotGraphic(std::string szName, std::string szAttachTo, float fX, float fY, float fZ, float fW, float fH, CyPlot *pPlot, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2):=void; void (string szName, string szAttachTo, float fX, float fY, float fZ, float fW, float fH, CyPlot *pPlot, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2)')
	apiList.append('CyGInterfaceScreen.addProjectGraphic(std::string szName, std::string szAttachTo, int iProject, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void (string szName, string szAttachTo, int iProject, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyGInterfaceScreen.addStackedBar(std::string szName, std::string szAttachTo, float fX, float fY, float fWidth, float fHeight, float fZ, int iNumBars, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, float fX, float fY, float fWidth, float fHeight, float fZ, int iNumBars, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addUnitGraphic(std::string szName, std::string szAttachTo, int iUnit, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void (string szName, string szAttachTo, int iUnit, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyGInterfaceScreen.addWorldWidget(std::string szName, std::string szAttachTo, float fX, float fY, float fZ, float fW, float fH, const NiPoint3 &position, const NiPoint3 &target, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2):=void; void (string szName, string szAttachTo, float fX, float fY, float fZ, float fW, float fH, const NiPoint3 &position, const NiPoint3 &target, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2)')
	apiList.append('CyGInterfaceScreen.appendText(std::string szName, std::string szAtttachTo, std::string szAppendTo, std::wstring szText, int uiFlags, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void ( string szName, string szAtttachTo, string szAppendTo, wstring szText, unsigned int uiFlags, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.attachScrollbarToDropDown(std::string szDropDownName, std::string szBackground, std::string szThumb, std::string szTopButton, std::string szBottomButton, float fX, float fY, float fZ):=void; void ( string szDropDownName, string szBackground, string szThumb, string szTopButton, string szBottomButton, float fX, float fY, float fZ )')
	apiList.append('CyGInterfaceScreen.attachScrollbarToListBox(std::string szListBox, std::string szBarFile, std::string szThumbFile, std::string szUpButtonFile, std::string szDownButtonFile, float fX, float fY, float fZ):=void; void ( string szListBox, string szBarFile, string szThumbFile, string szUpButtonFile, string szDownButtonFile, float fX, float fY, float fZ )')
	apiList.append('CyGInterfaceScreen.attachText(std::string szName, std::string szAttachNode, std::wstring szText, FontTypes eFont):=void; void ( string szName, string szAttachNode, wstring szText, FontTypes eFont )')
	apiList.append('CyGInterfaceScreen.findXPoint(float fX, float fY, float fDegree, float fRadius):=int; int ( float fX, float fY, float fDegree, float fRadius )')
	apiList.append('CyGInterfaceScreen.findYPoint(float fX, float fY, float fDegree, float fRadius):=int; int ( float fX, float fY, float fDegree, float fRadius )')
	apiList.append('CyGInterfaceScreen.getScrollableAreaCurrentX(std::string szName):=float; float (string szName)')
	apiList.append('CyGInterfaceScreen.getScrollableAreaCurrentY(std::string szName):=float; float (string szName)')
	apiList.append('CyGInterfaceScreen.getScrollbarCurrentStop(std::string szName):=int; int (string szName )')
	apiList.append('CyGInterfaceScreen.getSelectedListBoxID(std::string szName):=int; int (string szName )')
	apiList.append('CyGInterfaceScreen.getSelectedListBoxString(std::string szName):=std::string; string ( string szName )')
	apiList.append('CyGInterfaceScreen.getTextRightEdge(std::string szName):=float; float (string szName)')
	apiList.append('CyGInterfaceScreen.groupRadioButton(std::string szSource, std::string szTarget):=void; void ( string szSource, string szTarget )')
	apiList.append('CyGInterfaceScreen.hasExitButton():=bool; bool')
	apiList.append('CyGInterfaceScreen.hideRange(std::string szName, int iLow, int iHigh):=void; void ( string szName, int iLow, int iHigh )')
	apiList.append('CyGInterfaceScreen.highlightDDS(std::string szName, bool bOn, int eColor):=void; void (string szName, bool bOn, int eColor)')
	apiList.append('CyGInterfaceScreen.modifyWidgetData(std::string szName, WidgetTypes eType, int iData1, int iData2):=void; void (string szName, WidgetTypes eType, int iData1, int iData2)')
	apiList.append('CyGInterfaceScreen.parentClick(std::string szWidgetName, unsigned int uiFlags, int iData, bool bShift, bool bCtrl):=void; void ( string szWidgetName, unsigned int uiFlags, int iData, bool bShift, bool bCtrl )')
	apiList.append('CyGInterfaceScreen.resizeBorderedPane(std::string szName, float fLeft, float fRight, float fTop, float fBottom):=void; void ( string szName, float fLeft, float fRight, float fTop, float fBottom )')
	apiList.append('CyGInterfaceScreen.resizePane(std::string szName, float fLeft, float fRight, float fTop, float fBottom):=void; void ( string szName, float fLeft, float fRight, float fTop, float fBottom )')
	apiList.append('CyGInterfaceScreen.scrollableAreaScrollDown(std::string szName, float fDistance):=void; void (string szName, float fDistance)')
	apiList.append('CyGInterfaceScreen.scrollableAreaScrollLeft(std::string szName, float fDistance):=void; void (string szName, float fDistance)')
	apiList.append('CyGInterfaceScreen.scrollableAreaScrollRight(std::string szName, float fDistance):=void; void (string szName, float fDistance)')
	apiList.append('CyGInterfaceScreen.scrollableAreaScrollToBottom(std::string szName):=void; void ( string szName)')
	apiList.append('CyGInterfaceScreen.scrollableAreaScrollToTop(std::string szName):=void; void ( string szName)')
	apiList.append('CyGInterfaceScreen.scrollableAreaScrollUp(std::string szName, float fDistance):=void; void (string szName, float fDistance)')
	apiList.append('CyGInterfaceScreen.setAnimation(std::string szName, WidgetAnim eAnim, unsigned int uiKey):=void; void ( string szName, WidgetAnim eAnim, unsigned int uiKey )')
	apiList.append('CyGInterfaceScreen.setBackgroundBorderedPane(std::string szBackground, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable):=void; void ( string szBackground, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable )')
	apiList.append('CyGInterfaceScreen.setBackgroundWidget(std::string szBackground, float fX, float fY, float fZ):=void; void ( string szBackground, float fX, float fY, float fZ )')
	apiList.append('CyGInterfaceScreen.setButton(std::string szName, std::string szAttachTo, float fX, float fY, float fZ, std::string szTexture, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption, GenericButtonSizes eSize, std::string szCustomKFMName):=void; void ( string szName, string szAttachTo, float fX, float fY, float fZ, string szTexture, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption, GenericButtonSizes eSize, string szCustomKFMName )')
	apiList.append('CyGInterfaceScreen.setButtonText(std::string szName, std::wstring szText, std::string szTextAttachNode, bool bCenterText, FontTypes eFont):=void; void ( string szName, wstring szText, string szTextAttachNode, bool bCenterText, FontTypes eFont )')
	apiList.append('CyGInterfaceScreen.setCheckBox(std::string szName, std::string szAttachTo, float fX, float fY, float fZ, std::string szTexture, WidgetTypes eWidgetType, int iData1, int iData2, GenericButtonSizes eSize):=void; void ( string szName, string szAttachTo, float fX, float fY, float fZ, string szTexture, WidgetTypes eWidgetType, int iData1, int iData2, GenericButtonSizes eSize )')
	apiList.append('CyGInterfaceScreen.setDataElement(std::string szName, std::string szAttachTo, float fX, float fY, float fZ, float fWidth, float fHeight):=void; void ( string szName, string szAttachTo, float fX, float fY, float fZ, float fWidth, float fHeight )')
	apiList.append('CyGInterfaceScreen.setDropDownColors(std::string szName, int eTopBar, int eText, int eSelected):=void; void ( string szName, int eTopBar, int eText, int eSelected )')
	apiList.append('CyGInterfaceScreen.setExitButton(std::string szArtFile, std::wstring szButtonText, std::string szTextAttachNode, bool bCenterText, float fX, float fY, float fZ, FontTypes eFont):=void; void ( string szArtFile, wstring szButtonText, string szTextAttachNode, bool bCenterText, float fX, float fY, float fZ, FontTypes eFont )')
	apiList.append('CyGInterfaceScreen.setFittedText(std::string szName, std::string szAttachTo, std::wstring szText, float fWidth, bool bExpandRight, bool bExpandDown, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=float; float ( string szName, string szAttachTo, wstring szText, float fWidth, bool bExpandRight, bool bExpandDown, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.setLeftText(std::string szName, std::wstring szString, FontTypes eFont, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, wstring szString, FontTypes eFont, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.setListBoxColors(std::string szName, int eColor, int eSelectedColor):=void; void ( string szName, int eColor, int eSelectedColor )')
	apiList.append('CyGInterfaceScreen.setNamedScrollableAreaHorizontalScrollbar(std::string szWidgetName, std::string szAttachTo, std::string szBackground, std::string szThumb, std::string szLeftArrow, std::string szRightArrow):=void; void ( string szWidgetName, string szAttachTo, string szBackground, string szThumb, string szLeftArrow, string szRightArrow )')
	apiList.append('CyGInterfaceScreen.setNamedScrollableAreaVeritcalScrollbar(std::string szWidgetName, std::string szAttachTo, std::string szBackground, std::string szThumb, std::string szUpArrow, std::string szDownArrow):=void; void ( string szWidgetName, string szAttachTo, string szBackground, string szThumb, string szUpArrow, string szDownArrow )')
	apiList.append('CyGInterfaceScreen.setPaneColor(std::string szName, int eColor):=void; void ( string szName, int eColor )')
	apiList.append('CyGInterfaceScreen.setPassThru(std::string szName, bool bPassThru):=void; void (string szName, bool bPassThru)')
	apiList.append('CyGInterfaceScreen.setPulsing(std::string szName, bool bPulsing):=void; void ( string szName, bool bPulsing )')
	apiList.append('CyGInterfaceScreen.setRadioButton(std::string szName, std::string szAttachTo, std::string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, string szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.setRadioButtonState(std::string szName, bool eState):=void; void ( string szName, bool /*FxCheckBox::CheckBoxState*/ eState )')
	apiList.append('CyGInterfaceScreen.setRightText(std::string szName, std::wstring szString, FontTypes eFont, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, wstring szString, FontTypes eFont, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.setScale(std::string szName, float fScale):=void; void (string szName, float fScale)')
	apiList.append('CyGInterfaceScreen.setScrollableArea(std::string szName, std::string szAttachTo, float fX, float fY, float fZ):=void; void ( string szName, string szAttachTo, float fX, float fY, float fZ )')
	apiList.append('CyGInterfaceScreen.setScrollableAreaDimensions(std::string szName, float fX, float fY, float fWidth, float fHeight):=void; void ( string szName, float fX, float fY, float fWidth, float fHeight )')
	apiList.append('CyGInterfaceScreen.setScrollableAreaHorizontalScrollbar(std::string szName, std::string szBackground, std::string szThumb, std::string szLeftArrow, std::string szRightArrow):=void; void ( string szName, string szBackground, string szThumb, string szLeftArrow, string szRightArrow )')
	apiList.append('CyGInterfaceScreen.setScrollableAreaPaneColor(std::string szName, float fRed, float fGreen, float fBlue, float fAlpha):=void; void ( string szName, float fRed, float fGreen, float fBlue, float fAlpha )')
	apiList.append('CyGInterfaceScreen.setScrollableAreaVeritcalScrollbar(std::string szName, std::string szBackground, std::string szThumb, std::string szUpArrow, std::string szDownArrow):=void; void ( string szName, string szBackground, string szThumb, string szUpArrow, string szDownArrow )')
	apiList.append('CyGInterfaceScreen.setScrollbar(std::string szName, std::string szAttachTo, std::string szBackground, std::string szThumb, std::string szLeftArrow, std::string szRightArrow, float fX, float fY, float fZ, float fHeight, float fWidth, bool bVertical):=void; void ( string szName, string szAttachTo, string szBackground, string szThumb, string szLeftArrow, string szRightArrow, float fX, float fY, float fZ, float fHeight, float fWidth, bool bVertical)')
	apiList.append('CyGInterfaceScreen.setScrollbarNumStops(std::string szName, int iNumStops):=void; void (  string szName, int iNumStops )')
	apiList.append('CyGInterfaceScreen.setScrollbarToStop(std::string szName, int iStop):=void; void ( string szName, int iStop )')
	apiList.append('CyGInterfaceScreen.setSelectedListBoxString(std::string szName, int iID):=void; void ( string szName, int iID )')
	apiList.append('CyGInterfaceScreen.setTextBackgroundPane(std::string szName, int eColor):=void; void ( string szName, int eColor )')
	apiList.append('CyGInterfaceScreen.setTextColor(std::string szName, int eColor):=void; void ( string szName, int eColor )')
	apiList.append('CyGInterfaceScreen.setTextHighlightColor(std::string szName, int eColor):=void; void ( string szName, int eColor )')
	apiList.append('CyInterface.getSelectionPlotUnit():=CyUnit; CyUnit* ()')
	apiList.append('CyInterfaceScreen...nonSDK')
	apiList.append('CyInterfaceScreen.addBonusGraphic(const char *szName, const char *szAttachTo, int iBonus, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void addBonusGraphic(const char *szName, const char *szAttachTo, int iBonus, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyInterfaceScreen.addBorderedPane(const char *szName, const char *szAttachTo, const char *szArtFile, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable, WidgetTypes eWidgetType, int iData1, int iData2):=void; void addBorderedPane( const char *szName, const char *szAttachTo, const char *szArtFile, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.addBuildingGraphic(const char *szName, const char *szAttachTo, int iBuilding, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void addBuildingGraphic(const char *szName, const char *szAttachTo, int iBuilding, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyInterfaceScreen.addDDS(const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, float fWidth, float fHeight, WidgetTypes eWidgetType, int iData1, int iData2):=void; void addDDS( const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, float fWidth, float fHeight, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.addDropDownBox(const char *szName, const char *szAttachTo, const char *szUpperListBoxFile, const char *szLowerListBoxFile, const char *szDropButtonFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, const char *szUpperBounds, const char *szLowerBounds, FontTypes eFont):=void; void addDropDownBox( const char *szName, const char *szAttachTo, const char *szUpperListBoxFile, const char *szLowerListBoxFile, const char *szDropButtonFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, const char *szUpperBounds, const char *szLowerBounds, FontTypes eFont )')
	apiList.append('CyInterfaceScreen.addEditBox(const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, const char *szTextField, const char *szCaret, FontTypes eFont):=void; void addEditBox( const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, const char *szTextField, const char *szCaret, FontTypes eFont )')
	apiList.append('CyInterfaceScreen.addGraphic(const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2):=void; void addGraphic( const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.addImprovementGraphic(const char *szName, const char *szAttachTo, int iImprovement, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void addImprovementGraphic(const char *szName, const char *szAttachTo, int iImprovement, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyInterfaceScreen.addLeaderhead(const char * szName, const char * szAttachTo, int eWho, int eInitAttitude, float fX, float fY, float fZ, float fScale, WidgetTypes eWidget, int iData1, int iData2):=void; void addLeaderhead( const char * szName, const char * szAttachTo, int eWho, int eInitAttitude, float fX, float fY, float fZ, float fScale, WidgetTypes eWidget, int iData1, int iData2)')
	apiList.append('CyInterfaceScreen.addLine(const char *szName, const char *szAttachTo, float fXStart, float fYStart, float fXEnd, float fYEnd, float fZ, float fWidth, int eColor, WidgetTypes eType, int iData1, int iData2):=void; void addLine( const char *szName, const char *szAttachTo, float fXStart, float fYStart, float fXEnd, float fYEnd, float fZ, float fWidth, int eColor, WidgetTypes eType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.addListBox(const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, const char *szTextBounds, FontTypes eFont):=void; void addListBox( const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2, const char *szTextBounds, FontTypes eFont )')
	apiList.append('CyInterfaceScreen.addListBoxString(const char *szName, std::wstring szString, int iID):=void; void addListBoxString( const char *szName, std::wstring szString, int iID )')
	apiList.append('CyInterfaceScreen.addPane(const char *szName, const char *szAttachTo, float fX, float fY, float fZ, float fWidth, float fHeight, int eColor, WidgetTypes eWidgetType, int iData1, int iData2, bool bPassThru):=void; void addPane( const char *szName, const char *szAttachTo, float fX, float fY, float fZ, float fWidth, float fHeight, int eColor, WidgetTypes eWidgetType, int iData1, int iData2, bool bPassThru )')
	apiList.append('CyInterfaceScreen.addPlotGraphic(const char *szName, const char *szAttachTo, float fX, float fY, float fZ, float fW, float fH, CyPlot *pPlot, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2):=void; void addPlotGraphic(const char *szName, const char *szAttachTo, float fX, float fY, float fZ, float fW, float fH, CyPlot *pPlot, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2)')
	apiList.append('CyInterfaceScreen.addProjectGraphic(const char *szName, const char *szAttachTo, int iProject, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void addProjectGraphic(const char *szName, const char *szAttachTo, int iProject, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyInterfaceScreen.addPullDownString(const char *szName, std::wstring szString, int iType, int iData, bool bSelected):=void; void addPullDownString( const char *szName, std::wstring szString, int iType, int iData, bool bSelected )')
	apiList.append('CyInterfaceScreen.addUnitGraphic(const char *szName, const char *szAttachTo, int iUnit, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void addUnitGraphic(const char *szName, const char *szAttachTo, int iUnit, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground)')
	apiList.append('CyInterfaceScreen.addWorldWidget(const char *szName, const char *szAttachTo, float fX, float fY, float fZ, float fW, float fH, const NiPoint3 &position, const NiPoint3 &target, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2):=void; void addWorldWidget(const char *szName, const char *szAttachTo, float fX, float fY, float fZ, float fW, float fH, const NiPoint3 &position, const NiPoint3 &target, bool renderUnits, WidgetTypes eWidgetType, int iData1, int iData2)')
	apiList.append('CyInterfaceScreen.appendText(const char *szName, const char *szAtttachTo, const char *szAppendTo, std::wstring szText, unsigned int uiFlags, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void appendText( const char *szName, const char *szAtttachTo, const char *szAppendTo, std::wstring szText, unsigned int uiFlags, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.attachScrollbarToDropDown(const char *szDropDownName, const char *szBackground, const char *szThumb, const char *szTopButton, const char *szBottomButton, float fX, float fY, float fZ):=void; void attachScrollbarToDropDown( const char *szDropDownName, const char *szBackground, const char *szThumb, const char *szTopButton, const char *szBottomButton, float fX, float fY, float fZ )')
	apiList.append('CyInterfaceScreen.attachScrollbarToListBox(const char *szListBox, const char *szBarFile, const char *szThumbFile, const char *szUpButtonFile, const char *szDownButtonFile, float fX, float fY, float fZ):=void; void attachScrollbarToListBox( const char *szListBox, const char *szBarFile, const char *szThumbFile, const char *szUpButtonFile, const char *szDownButtonFile, float fX, float fY, float fZ )')
	apiList.append('CyInterfaceScreen.attachText(const char *szName, const char *szAttachNode, std::wstring szText, FontTypes eFont):=void; void attachText( const char *szName, const char *szAttachNode, std::wstring szText, FontTypes eFont )')
	apiList.append('CyInterfaceScreen.findXPoint(float fX, float fY, float fDegree, float fRadius):=int; int findXPoint( float fX, float fY, float fDegree, float fRadius )')
	apiList.append('CyInterfaceScreen.findYPoint(float fX, float fY, float fDegree, float fRadius):=int; int findYPoint( float fX, float fY, float fDegree, float fRadius )')
	apiList.append('CyInterfaceScreen.getCheckBoxState(const char *szName):=bool; bool getCheckBoxState( const char *szName )')
	apiList.append('CyInterfaceScreen.getEditBoxString(const char *szName):=std::wstring; std::wstring getEditBoxString( const char *szName )')
	apiList.append('CyInterfaceScreen.getPullDownData(const char *szName, int iIndex):=int; int getPullDownData( const char *szName, int iIndex )')
	apiList.append('CyInterfaceScreen.getPullDownType(const char *szName, int iIndex):=int; int getPullDownType( const char *szName, int iIndex )')
	apiList.append('CyInterfaceScreen.getPythonFileID(void):=int; int getPythonFileID( void )')
	apiList.append('CyInterfaceScreen.getRenderInterfaceOnly():=bool; bool getRenderInterfaceOnly()')
	apiList.append('CyInterfaceScreen.getScrollableAreaCurrentX(const char *szName):=float; float getScrollableAreaCurrentX(const char *szName)')
	apiList.append('CyInterfaceScreen.getScrollableAreaCurrentY(const char *szName):=float; float getScrollableAreaCurrentY(const char *szName)')
	apiList.append('CyInterfaceScreen.getScrollbarCurrentStop(const char *szName):=int; int getScrollbarCurrentStop( const char *szName )')
	apiList.append('CyInterfaceScreen.getSelectedListBoxID(const char *szName):=int; int getSelectedListBoxID( const char *szName )')
	apiList.append('CyInterfaceScreen.getSelectedListBoxString(const char *szName):=std::string; std::string getSelectedListBoxString( const char *szName )')
	apiList.append('CyInterfaceScreen.getSelectedPullDownID(const char *szName):=int; int getSelectedPullDownID( const char *szName )')
	apiList.append('CyInterfaceScreen.getTextRightEdge(const char *szName):=float; float getTextRightEdge(const char *szName)')
	apiList.append('CyInterfaceScreen.groupRadioButton(const char *szSource, const char *szTarget):=void; void groupRadioButton( const char *szSource, const char *szTarget )')
	apiList.append('CyInterfaceScreen.hasExitButton(void):=bool; bool hasExitButton( void )')
	apiList.append('CyInterfaceScreen.hide(const char *szName):=void; void hide( const char *szName )')
	apiList.append('CyInterfaceScreen.hideScreen(void):=void; void hideScreen( void )')
	apiList.append('CyInterfaceScreen.highlightDDS(const char *szName, bool bOn, int eColor):=void; void highlightDDS(const char *szName, bool bOn, int eColor)')
	apiList.append('CyInterfaceScreen.initMinimap(int iLeft, int iRight, int iTop, int iBottom, float fZ):=void; void initMinimap(int iLeft, int iRight, int iTop, int iBottom, float fZ)')
	apiList.append('CyInterfaceScreen.isActive():=bool; bool isActive()')
	apiList.append('CyInterfaceScreen.modifyString(const char *szName, std::wstring szText, unsigned int uiFlags):=void; void modifyString( const char *szName, std::wstring szText, unsigned int uiFlags )')
	apiList.append('CyInterfaceScreen.moveItem(const char *szName, float fX, float fY, float fZ):=void; void moveItem( const char *szName, float fX, float fY, float fZ )')
	apiList.append('CyInterfaceScreen.parentClick(const char *szWidgetName, unsigned int uiFlags, int iData, bool bShift, bool bCtrl):=void; void parentClick( const char *szWidgetName, unsigned int uiFlags, int iData, bool bShift, bool bCtrl )')
	apiList.append('CyInterfaceScreen.performLeaderheadAction(const char * szName, int eAction):=void; void performLeaderheadAction( const char * szName, int eAction )')
	apiList.append('CyInterfaceScreen.playMovie(const char *szMovieName, float fX, float fY, float fWidth, float fHeight, float fZ):=void; void playMovie( const char *szMovieName, float fX, float fY, float fWidth, float fHeight, float fZ)')
	apiList.append('CyInterfaceScreen.scrollableAreaScrollDown(const char *szName, float fDistance):=void; void scrollableAreaScrollDown(const char *szName, float fDistance)')
	apiList.append('CyInterfaceScreen.scrollableAreaScrollLeft(const char *szName, float fDistance):=void; void scrollableAreaScrollLeft(const char *szName, float fDistance)')
	apiList.append('CyInterfaceScreen.scrollableAreaScrollRight(const char *szName, float fDistance):=void; void scrollableAreaScrollRight(const char *szName, float fDistance)')
	apiList.append('CyInterfaceScreen.scrollableAreaScrollToBottom(const char *szName):=void; void scrollableAreaScrollToBottom(const char *szName)')
	apiList.append('CyInterfaceScreen.scrollableAreaScrollToTop(const char *szName):=void; void scrollableAreaScrollToTop(const char *szName)')
	apiList.append('CyInterfaceScreen.scrollableAreaScrollUp(const char *szName, float fDistance):=void; void scrollableAreaScrollUp(const char *szName, float fDistance)')
	apiList.append('CyInterfaceScreen.setAnimation(const char *szName, WidgetAnim eAnim, unsigned int uiKey):=void; void setAnimation( const char *szName, WidgetAnim eAnim, unsigned int uiKey )')
	apiList.append('CyInterfaceScreen.setBackgroundBorderedPane(const char *szBackground, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable):=void; void setBackgroundBorderedPane( const char *szBackground, float fX, float fY, float fZ, float fWidth, float fHeight, float fBorderSize, bool bDragable )')
	apiList.append('CyInterfaceScreen.setBackgroundWidget(const char *szBackground, float fX, float fY, float fZ):=void; void setBackgroundWidget( const char *szBackground, float fX, float fY, float fZ )')
	apiList.append('CyInterfaceScreen.setButton(const char *szName, const char *szAttachTo, float fX, float fY, float fZ, const char *szTexture, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption, GenericButtonSizes eSize, const char *szCustomKFMName):=void; void setButton( const char *szName, const char *szAttachTo, float fX, float fY, float fZ, const char *szTexture, WidgetTypes eWidgetType, int iData1, int iData2, bool bOption, GenericButtonSizes eSize, const char *szCustomKFMName )')
	apiList.append('CyInterfaceScreen.setButtonText(const char *szName, std::wstring szText, const char *szTextAttachNode, bool bCenterText, FontTypes eFont):=void; void setButtonText( const char *szName, std::wstring szText, const char *szTextAttachNode, bool bCenterText, FontTypes eFont )')
	apiList.append('CyInterfaceScreen.setCheckBox(const char *szName, const char *szAttachTo, float fX, float fY, float fZ, const char *szTexture, WidgetTypes eWidgetType, int iData1, int iData2, GenericButtonSizes eSize):=void; void setCheckBox( const char *szName, const char *szAttachTo, float fX, float fY, float fZ, const char *szTexture, WidgetTypes eWidgetType, int iData1, int iData2, GenericButtonSizes eSize )')
	apiList.append('CyInterfaceScreen.setDropDownColors(const char *szName, int eTopBar, int eText, int eSelected):=void; void setDropDownColors( const char *szName, int eTopBar, int eText, int eSelected )')
	apiList.append('CyInterfaceScreen.setDying(bool bDying):=void; void setDying( bool bDying )')
	apiList.append('CyInterfaceScreen.setEditBoxString(const char *szName, std::wstring szString):=void; void setEditBoxString( const char *szName, std::wstring szString )')
	apiList.append('CyInterfaceScreen.setEditBoxTextColor(const char *szName, NiColorA kColor):=void; void setEditBoxTextColor( const char *szName, NiColorA kColor )')
	apiList.append('CyInterfaceScreen.setExitButton(const char *szArtFile, std::wstring szButtonText, const char *szTextAttachNode, bool bCenterText, float fX, float fY, float fZ, FontTypes eFont):=void; void setExitButton( const char *szArtFile, std::wstring szButtonText, const char *szTextAttachNode, bool bCenterText, float fX, float fY, float fZ, FontTypes eFont )')
	apiList.append('CyInterfaceScreen.setExitText(std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont):=void; void setExitText( std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont )')
	apiList.append('CyInterfaceScreen.setFittedText(const char *szName, const char *szAttachTo, std::wstring szText, float fWidth, bool bExpandRight, bool bExpandDown, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=float; float setFittedText( const char *szName, const char *szAttachTo, std::wstring szText, float fWidth, bool bExpandRight, bool bExpandDown, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.setHelpTextArea(float fWidth, FontTypes eFont, float fX, float fY, float fZ, bool bFloating, const char *szArtFile, bool bExpandRight, bool bExpandDown, uint uiFlags, int iMinWidth):=void; void setHelpTextArea( float fWidth, FontTypes eFont, float fX, float fY, float fZ, bool bFloating, const char *szArtFile, bool bExpandRight, bool bExpandDown, uint uiFlags, int iMinWidth )')
	apiList.append('CyInterfaceScreen.setListBoxColors(const char *szName, int eColor, int eSelectedColor):=void; void setListBoxColors( const char *szName, int eColor, int eSelectedColor )')
	apiList.append('CyInterfaceScreen.setMinimapMode(MinimapModeTypes eMode):=void; void setMinimapMode(MinimapModeTypes eMode)')
	apiList.append('CyInterfaceScreen.setNamedScrollableAreaHorizontalScrollbar(const char *szWidgetName, const char *szAttachTo, const char *szBackground, const char *szThumb, const char *szLeftArrow, const char *szRightArrow):=void; void setNamedScrollableAreaHorizontalScrollbar( const char *szWidgetName, const char *szAttachTo, const char *szBackground, const char *szThumb, const char *szLeftArrow, const char *szRightArrow )')
	apiList.append('CyInterfaceScreen.setNamedScrollableAreaVeritcalScrollbar(const char *szWidgetName, const char *szAttachTo, const char *szBackground, const char *szThumb, const char *szUpArrow, const char *szDownArrow):=void; void setNamedScrollableAreaVeritcalScrollbar( const char *szWidgetName, const char *szAttachTo, const char *szBackground, const char *szThumb, const char *szUpArrow, const char *szDownArrow )')
	apiList.append('CyInterfaceScreen.setPaneColor(const char *szName, int eColor):=void; void setPaneColor( const char *szName, int eColor )')
	apiList.append('CyInterfaceScreen.setRadioButton(const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2):=void; void setRadioButton( const char *szName, const char *szAttachTo, const char *szFile, float fX, float fY, float fZ, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.setRadioButtonState(const char *szName, bool eState):=void; void setRadioButtonState( const char *szName, bool /*FxCheckBox::CheckBoxState*/ eState )')
	apiList.append('CyInterfaceScreen.setRenderInterfaceOnly(bool val):=void; void setRenderInterfaceOnly(bool val)')
	apiList.append('CyInterfaceScreen.setScale(const char *szName, float fScale):=void; void setScale(const char *szName, float fScale)')
	apiList.append('CyInterfaceScreen.setScrollableArea(const char *szName, const char *szAttachTo, float fX, float fY, float fZ):=void; void setScrollableArea( const char *szName, const char *szAttachTo, float fX, float fY, float fZ )')
	apiList.append('CyInterfaceScreen.setScrollableAreaDimensions(const char *szName, float fX, float fY, float fWidth, float fHeight):=void; void setScrollableAreaDimensions( const char *szName, float fX, float fY, float fWidth, float fHeight )')
	apiList.append('CyInterfaceScreen.setScrollableAreaHorizontalScrollbar(const char *szName, const char *szBackground, const char *szThumb, const char *szLeftArrow, const char *szRightArrow):=void; void setScrollableAreaHorizontalScrollbar( const char *szName, const char *szBackground, const char *szThumb, const char *szLeftArrow, const char *szRightArrow )')
	apiList.append('CyInterfaceScreen.setScrollableAreaPaneColor(const char *szName, float fRed, float fGreen, float fBlue, float fAlpha):=void; void setScrollableAreaPaneColor( const char *szName, float fRed, float fGreen, float fBlue, float fAlpha )')
	apiList.append('CyInterfaceScreen.setScrollableAreaVeritcalScrollbar(const char *szName, const char *szBackground, const char *szThumb, const char *szUpArrow, const char *szDownArrow):=void; void setScrollableAreaVeritcalScrollbar( const char *szName, const char *szBackground, const char *szThumb, const char *szUpArrow, const char *szDownArrow )')
	apiList.append('CyInterfaceScreen.setScrollbar(const char *szName, const char *szAttachTo, const char *szBackground, const char *szThumb, const char *szLeftArrow, const char *szRightArrow, float fX, float fY, float fZ, float fHeight, float fWidth, bool bVertical):=void; void setScrollbar( const char *szName, const char *szAttachTo, const char *szBackground, const char *szThumb, const char *szLeftArrow, const char *szRightArrow, float fX, float fY, float fZ, float fHeight, float fWidth, bool bVertical)')
	apiList.append('CyInterfaceScreen.setScrollbarNumStops(const char *szName, int iNumStops):=void; void setScrollbarNumStops(  const char *szName, int iNumStops )')
	apiList.append('CyInterfaceScreen.setScrollbarToStop(const char *szName, int iStop):=void; void setScrollbarToStop( const char *szName, int iStop )')
	apiList.append('CyInterfaceScreen.setSelectedListBoxString(const char *szName, int iID):=void; void setSelectedListBoxString( const char *szName, int iID )')
	apiList.append('CyInterfaceScreen.setState(const char *szName, bool eState):=void; void setState( const char *szName, bool /*FxCheckBox::CheckBoxState*/ eState )')
	apiList.append('CyInterfaceScreen.setText(const char *szName, const char *szAtttachTo, std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2):=void; void setText( const char *szName, const char *szAtttachTo, std::wstring szText, unsigned int uiFlags, float fX, float fY, float fZ, FontTypes eFont, WidgetTypes eType, int iData1, int iData2 )')
	apiList.append('CyInterfaceScreen.setTextColor(const char *szName, int eColor):=void; void setTextColor( const char *szName, int eColor )')
	apiList.append('CyInterfaceScreen.setTextHighlightColor(const char *szName, int eColor):=void; void setTextHighlightColor( const char *szName, int eColor )')
	apiList.append('CyInterfaceScreen.show(const char *szName):=void; void show( const char *szName )')
	apiList.append('CyInterfaceScreen.showScreen(PopupStates bState, bool bPassInput):=void; void showScreen( PopupStates bState, bool bPassInput )')
	apiList.append('CyInterfaceScreen.updateMinimap(float fTime):=void; void updateMinimap(float fTime)')
	apiList.append('CyInterfaceScreen.updateMinimapSection(bool bWholeMap, bool bBands):=void; void updateMinimapSection(bool bWholeMap, bool bBands)')
	apiList.append('CyUnitEntity.GetUnitFacingDirection():=float; float GetUnitFacingDirection() - Returns the facing direction of the unit')
	apiList.append('CyUnitEntity.SetUnitFacingDirection():=void; void SetUnitFacingDirection() - Sets the facing direction of the unit')
	# Class members which are changed and should be replaced below
	apiList.append('CyGInterfaceScreen.addCheckBoxGFCAt(std::string szName, std::string szTexture, std::string szHiliteTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle):=void; void ( string szName, string szTexture, string szHiliteTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle )')
	apiList.append('CyGInterfaceScreen.addFlagWidgetGFC(std::string szName, std::string szFile, int iX, int iY, int iWidth, int iHeight, int iOwner, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szFile, int iX, int iY, int iWidth, int iHeight, int iOwner, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addPullDownString(std::string szName, std::string szAttachTo, int iProject, float fX, float fY, float fZ, float fW, float fH, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void ( string szName, wstring szString, int iType, int iData, bool bSelected )')
	apiList.append('CyInterface.DoSoundtrack(std::string szSoundtrackScript):=void; void (string szSoundtrackScript)')

#-------------------------------------------------------------------------------------- 
if iVersion >= 300:	# BTS only, don't display these for the original or Warlords game API
	# Class members which have changed from previous versions
	apiList.append('CyGInterfaceScreen.addCheckBoxGFCAt(std::string szName, std::string szTexture, std::string szHiliteTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle, bool bSafeFocus):=void; void ( string szName, string szTexture, string szHiliteTexture, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2, ButtonStyles eStyle, bool bSafeFocus )')
	apiList.append('CyGInterfaceScreen.addFlagWidgetGFC(std::string szName, int iX, int iY, int iWidth, int iHeight, int iOwner, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight, int iOwner, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addPullDownString(std::string szName, std::wstring szString, int iType, int iData, bool bSelected):=void; void ( string szName, wstring szString, int iType, int iData, bool bSelected )')
	apiList.append('CyInterface.DoSoundtrack(std::string szSoundtrackScript):=bool; bool (string szSoundtrackScript)')
	# Class members which are completely new
	apiList.append('CyEngine.clearAreaBorderPlots(int iLayer):=void; void (int iLayer)')
	apiList.append('CyEngine.fillAreaBorderPlot(int plotX, int plotY, NiColorA color, int iLayer):=void; void (int plotX, int plotY, NiColorA color, int iLayer)')
	apiList.append('CyEngine.fillAreaBorderPlotAlt(int plotX, int plotY, int iLayer, string szColor, float fAlpha):=void; void (int plotX, int plotY, int iLayer, string szColor, float fAlpha)')
	apiList.append('CyEngine.getCultureVisibility():=bool; bool ()')
	apiList.append('CyEngine.setCultureVisibility(bool bState):=void; void (bool bState)')
	apiList.append('CyGInterfaceScreen.addModelGraphicGFC(std::string szName, std::string szFile, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale):=void; void ( string szName, string szFile, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale )')
	apiList.append('CyGInterfaceScreen.addSpaceShipWidgetGFC(std::string szName, int iX, int iY, int iWidth, int iHeight, int projectType, int artType, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, int iX, int iY, int iWidth, int iHeight, int projectType, int artType, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addSpecificUnitGraphicGFC(std::string szName, CyUnit* pUnit, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground):=void; void ( string szName, CyUnit* pUnit, int iX, int iY, int iWidth, int iHeight, WidgetTypes eWidgetType, int iData1, int iData2,  float fxRotation, float fzRotation, float fScale, bool bShowBackground )')
	apiList.append('CyGInterfaceScreen.addStackedBarGFCAt(std::string szName, std::string szAttachTo, int iX, int iY, int iWidth, int iHeight, int iNumBars, WidgetTypes eWidgetType, int iData1, int iData2):=void; void ( string szName, string szAttachTo, int iX, int iY, int iWidth, int iHeight, int iNumBars, WidgetTypes eWidgetType, int iData1, int iData2 )')
	apiList.append('CyGInterfaceScreen.addTableControlGFCWithHelp(std::string szName, int numColumns, int iX, int iY, int iWidth, int iHeight, bool bIncludeHeaders, bool bDrawGrid, int iconWidth, int iconHeight, TableStyles style, std::wstring szHelpText):=void; void ( string szName, int numColumns, int iX, int iY, int iWidth, int iHeight, bool bIncludeHeaders, bool bDrawGrid, int iconWidth, int iconHeight, TableStyles style, wstring szHelpText )')
	apiList.append('CyGInterfaceScreen.addToModelGraphicGFC(std::string szName, std::string szFile):=void; void ( string szName, string szFile)')
	apiList.append('CyGInterfaceScreen.appendListBoxStringNoUpdate(std::string szAttachTo, std::wstring item, WidgetTypes eType, int iData1, int iData2, int iJustify):=void; void ( string szAttachTo, wstring item, WidgetTypes eType, int iData1, int iData2, int iJustify )')
	apiList.append('CyGInterfaceScreen.attachSeparator(std::string szAttachTo, std::string szName, bool bVertical):=void; void (string szAttachTo, string szName, bool bVertical)')
	apiList.append('CyGInterfaceScreen.changeModelGraphicTextureGFC(std::string szName, std::string szFile):=void; void ( string szName, string szFile)')
	apiList.append('CyGInterfaceScreen.leaderheadKeyInput(std::string  szName, int key):=void; void ( string  szName, int key )')
	apiList.append('CyGInterfaceScreen.setMinimapSectionOverride(float left, float bottom, float right, float top):=void; void (float left, float bottom, float right, float top)')
	apiList.append('CyGInterfaceScreen.setModelGraphicRotationRateGFC(std::string szName, float rate):=void; void ( string szName, float rate)')
	apiList.append('CyGInterfaceScreen.setSpaceShip(ProjectTypes projectType):=void; void (ProjectTypes projectType)')
	apiList.append('CyGInterfaceScreen.spaceShipCanChangeType(ProjectTypes projectType):=bool; bool (ProjectTypes projectType)')
	apiList.append('CyGInterfaceScreen.spaceShipChangeType(ProjectTypes projectType):=void; void (ProjectTypes projectType)')
	apiList.append('CyGInterfaceScreen.spaceShipFinalize():=void; void ()')
	apiList.append('CyGInterfaceScreen.spaceShipLaunch():=void; void ()')
	apiList.append('CyGInterfaceScreen.spaceShipZoom(ProjectTypes projectType):=void; void (ProjectTypes projectType)')
	apiList.append('CyGInterfaceScreen.updateListBox(std::string szAttachTo):=void; void ( string szAttachTo )')
	apiList.append('CyInterface.addQuestMessage(PlayerTypes ePlayer, std::wstring szString):=void; void (int /*PlayerTypes*/ ePlayer, wstring szString)')
	apiList.append('CyInterface.cacheInterfacePlotUnits(CyPlot *):=void; void (CyPlot *)')
	apiList.append('CyInterface.exitingToMainMenu(std::string szLoadFile):=void; void (std::string szLoadFile)')
	apiList.append('CyInterface.getCachedInterfacePlotUnit(int iIndex):=CyUnit*; CyUnit* (index)')
	apiList.append('CyInterface.getGotoPlot():=CyPlot*; CyPlot* ()')
	apiList.append('CyInterface.getNumCachedInterfacePlotUnits():=int; int ()')
	apiList.append('CyInterface.isFocusedWidget():=bool; bool ()')
	apiList.append('CyInterface.isInAdvancedStart():=bool; bool ()')
	apiList.append('CyInterface.isScoresMinimized():=bool; bool ()')
	apiList.append('CyInterface.playGeneralSoundAtPlot(int iScriptID, CyPlot* pPlot):=void; void (int iScriptID, CyPlot*)')
	apiList.append('CyInterface.setBusy(bool bBusy):=void; void (bool)')
	apiList.append('CyInterface.setInterfaceMode(InterfaceModeTypes eMode):=void; void (InterfaceModeTypes)')
	apiList.append('CyInterface.toggleScoresMinimized():=void; void ()')
	apiList.append('CyMessageControl.sendAdvancedStartAction(AdvancedStartActionTypes eAction, PlayerTypes ePlayer, int iX, int iY, int iData, bool bAdd):=void; void (int /*AdvancedStartActionTypes*/ eAction, int /*PlayerTypes*/ ePlayer, int iX, int iY, int iData, bool bAdd)')
	apiList.append('CyMessageControl.sendDoTask(int iCity, int eTask, int iData1, int iData2, bool bOption, bool bAlt, bool bShift, bool bCtrl):=void; void (int iCity, int eTask, int iData1, int iData2, bool bOption, bool bAlt, bool bShift, bool bCtrl)')
	apiList.append('CyMessageControl.sendEmpireSplit(PlayerTypes ePlayer, int iAreaId):=void; void (int /*PlayerTypes*/ ePlayer, int iAreaId)')
	apiList.append('CyMessageControl.sendEspionageSpendingWeightChange(TeamTypes eTargetTeam, int iChange):=void; void (int /*TeamTypes*/ eTargetTeam, int iChange)')
	apiList.append('CyMessageControl.sendModNetMessage(int iData1, int iData2, int iData3, int iData4, int iData5):=void; void (int iData1, int iData2, int iData3, int iData4, int iData5) - This is a NetMessage designed specifically for modders to use to make their mods Multiplayer friendly, eliminating Out-of-Sync errors. Check out \'onModNetMessage()\' in CvEventManager for the callback')
	apiList.append('CyMessageControl.sendTurnComplete():=void; void () - allows you to force a turn to end')
	apiList.append('CyPopupInfo.getPythonModule():=string; string ()')
	apiList.append('CyPopupInfo.setPythonModule(std::string szOnFocus):=void; void (string szOnFocus)')
	apiList.append('CyUserProfile.getGlobeLayer():=int; int ()')
	apiList.append('CyUserProfile.getGrid():=bool; bool ()')
	apiList.append('CyUserProfile.getMainMenu():=int; int () - returns the main menu index currently used')
	apiList.append('CyUserProfile.getMap():=bool; bool ()')
	apiList.append('CyUserProfile.getMovieQualityLevel():=int; int () - returns the movie quality level')
	apiList.append('CyUserProfile.getScores():=bool; bool ()')
	apiList.append('CyUserProfile.getYields():=bool; bool ()')
	apiList.append('CyUserProfile.setMainMenu(int i):=void; void (int i) - sets the main menu index currently used')
	apiList.append('CyUserProfile.setMovieQualityLevel(int level):=void; void (int level) - sets the movie quality level')

	# hardcode these class members (BTS, and not Python)
	apiList.append('CvDiplomacyResponse...nonSDK')
	apiList.append('CvDiplomacyResponse.getNumDiplomacyText():=int; int ()')
	apiList.append('CvDiplomacyResponse.setNumDiplomacyText(int i):=void; void (int i)')
	apiList.append('CvDiplomacyResponse.getCivilizationTypes(int i):=bool; bool (int i)')
	apiList.append('CvDiplomacyResponse.getCivilizationTypes():=bool*; bool* ()')
	apiList.append('CvDiplomacyResponse.setCivilizationTypes(int i, bool bVal):=void; void setCivilizationTypes(int i, bool bVal)')
	apiList.append('CvDiplomacyResponse.getLeaderHeadTypes(int i):=bool; bool (int i)')
	apiList.append('CvDiplomacyResponse.getLeaderHeadTypes():=bool*; bool* () const')
	apiList.append('CvDiplomacyResponse.setLeaderHeadTypes(int i, bool bVal):=void; void (int i, bool bVal)')
	apiList.append('CvDiplomacyResponse.getAttitudeTypes(int i):=bool; bool (int i) const')
	apiList.append('CvDiplomacyResponse.getAttitudeTypes():=bool*; bool* () const')
	apiList.append('CvDiplomacyResponse.setAttitudeTypes(int i, bool bVal):=void; void (int i, bool bVal)')
	apiList.append('CvDiplomacyResponse.getDiplomacyPowerTypes(int i):=bool; bool (int i)')
	apiList.append('CvDiplomacyResponse.getDiplomacyPowerTypes():=bool*; bool* () const')
	apiList.append('CvDiplomacyResponse.setDiplomacyPowerTypes(int i, bool bVal):=void; void (int i, bool bVal)')
	apiList.append('CvDiplomacyResponse.getDiplomacyText(int i):=const TCHAR*; const TCHAR* (int i) const')
	apiList.append('CvDiplomacyResponse.getDiplomacyText() const:=const CvString*; const CvString* () const')
	#apiList.append('CvDiplomacyResponse.')
	#apiList.append('CvDiplomacyResponse.')
	#apiList.append('CvDiplomacyResponse.')
	#apiList.append('CvDiplomacyResponse.')
	#apiList.append('CvDiplomacyResponse.')
	#apiList.append('CvDiplomacyResponse.')
	#apiList.append('CvDiplomacyResponse.')
	#apiList.append('CvDiplomacyResponse.')
	apiList.append('Response...nonSDK')
	apiList.append('WidgetAnim...nonSDK')


### helper methods ### -- actual code starts here

def commentApiList():
	"""Add additional commentary to API items."""
	finalList = []
	for strApiItem in apiList:
		strMethod = strApiItem[:strApiItem.find('(')]
		if commentDict.has_key(strMethod):
			finalList.append(strApiItem[:strApiItem.find(';')+1] + ' ' + commentDict[strMethod])
		else:
			finalList.append(strApiItem)
	return finalList

def getMultiFileClasses(strFile=''):
	"""Extract a list of large classes that can be spread over multiple files."""
	print ' ', strFile
	# read the definitions file
	try:
		fFile = open(strFile, 'rt')
	except IOError:
		print sys.exc_info()[0]
		return
	lineList = fFile.readlines()
	fFile.close()

	# set up regular expression to extract class name
	reClassMulti = re.compile(r'python::class_<(?P<cppclass>.*?)(,[ \t]*python::bases<(?P<parents>.*?))?>(.*?)\("(?P<pythonclass>.*)"\)')

	# search file contents for classes
	for strLine in lineList:
		mClass = reClassMulti.search(strLine)
		if mClass:
			# set the current class
			strCppClassName = mClass.group('cppclass')
			strPythonClassName = mClass.group('pythonclass')
			# store it for the class list
			multiFileClassDict[strCppClassName] = strPythonClassName

def processInterfaceFile(strFile=''):
	"""Process a C++ Python-Interface file to get API info."""
	# only do C++ wrapper files
	#if strFile[:16] != strSdkDirName + '\Cy' or strFile[-4:] != '.cpp':
	# Let's try a more os-independent test that doesn't assume the directory name to be 13 chars
	(strDirName, strBaseName) = os.path.split(strFile)
	if strDirName != strSdkDirName or strBaseName[:2] != 'Cy' or strBaseName[-4:] != '.cpp':
		return
	print ' ', strFile
	# read the C++ file
	try:
		fFile = open(strFile, 'rt')
	except IOError:
		print sys.exc_info()[0]
		return
	lineList = fFile.readlines()
	fFile.close()

	# set up regular expressions to extract class info
	reClass = re.compile(r'python::class_<(?P<cppclass>.*?)(,[ \t]*python::bases<(?P<parents>.*?)>[ \t]*)?>\("(?P<pythonclass>.*)"\)')
	reClassMulti = re.compile(r'python::class_<(?P<cppclass>.*?)(,[ \t]*python::bases<(?P<parents>.*?))?>&')
	reDef = re.compile(r'^[ \t]+.def\("(?P<pythonfunc>.*)",[ \t]*&(?P<cppclass>.*?)::(?P<cppfunc>.*?)(,(?P<doc>.*)\)|\))')
	reDoc = re.compile(r',[ \t]*"(.*)"')
	reConst = re.compile(r'python::init<(.*)>')
	reAttrib = re.compile(r'.def_readwrite\("(?P<pythonattrib>.*)",[ \t]*&(?P<cppclass>.*?)::(?P<cppattrib>.*?)(,(?P<doc>.*)\)|\))')
	bInClass = False
	strClassName = ''
	strCppClassName = ''

	# search file contents for API info
	for strLine in lineList:
		# only do this while inside a class definition
		if bInClass:
			# detect method definition
			mDef = reDef.search(strLine)
			if mDef:
				# get docstring, if present
				strDoc = ''
				if mDef.group('doc') and '"' in mDef.group('doc'):
					strDoc = mDef.group('doc').split('"')[-2]
				# store definition; format: ('classPython.functionPython', classCpp, functionCpp, strDoc)
				apiDict[strClassName + '.' + mDef.group('pythonfunc')] = (strClassName + '.' + mDef.group('pythonfunc'), mDef.group('cppclass'), mDef.group('cppfunc'), strDoc)
			else:
				# detect constructor
				mConst = reConst.search(strLine)
				if mConst:
					# store constructor
					conList.append((strClassName, strCppClassName, mConst.group(1)))
				else:
					# detect attribute
					mAttrib = reAttrib.search(strLine)
					if mAttrib:
						strDoc = ''
						# find docstring, if present
						if mAttrib.group('doc') and '"' in mAttrib.group('doc'):
							strDoc = mAttrib.group('doc').split('"')[-2]
						# store attribute; format: ('classPython.functionattrib', classCpp, attribCpp)
						atrDict[strClassName + '.' + mAttrib.group('pythonattrib')] = (strClassName, mAttrib.group('pythonattrib'), mAttrib.group('cppclass'), mAttrib.group('cppattrib'), strDoc)
		# detect class definition
		mClass = reClass.search(strLine)
		if mClass:
			bInClass = True
			# set the current class
			strClassName = mClass.group('pythonclass')
			strCppClassName = mClass.group('cppclass')
			# get parent classes
			strParentList = []
			if mClass.group('parents'):
				strParentList = [parent.strip() for parent in mClass.group('parents').split(',')]
			# add it to the class list
			classDict[strCppClassName] = (strClassName, strParentList)
			apiList.append(strClassName + '.')
		else:
			# in case it's a large class that can be spread over multiple files
			mClass = reClassMulti.search(strLine)
			if mClass:
				bInClass = True
				# set the current class
				strCppClassName = mClass.group('cppclass')
				strClassName = multiFileClassDict[strCppClassName]
				# get parent classes
				strParentList = []
				if mClass.group('parents'):
					strParentList = [parent.strip() for parent in mClass.group('parents').split(',')]
				# add it to the class list
				classDict[strCppClassName] = (strClassName, strParentList)
				apiList.append(strClassName + '.')

def processHeaderFile(strFile):
	"""Process a C++ header file to get data type info."""
	# only do C++ code files
	if strFile[-2:] != '.h':
		return
	print ' ', strFile
	# read the Header file
	try:
		fFile = open(strFile, 'rt')
	except IOError:
		print sys.exc_info()[0]
		return
	linesList = fFile.readlines()
	fFile.close()

	# set up regular expressions to extract function info
	reClass = re.compile(r'^[ \t]*class[ \t]+(?P<name>[^;/]*)')
	reStruct = re.compile(r'^[ \t]*struct[ \t]+DllExport[ \t]+(?P<name>[^;/]*)')
	reStructAlt = re.compile(r'^[ \t]*struct[ \t]+(?P<name>[^;/]*)')
	reBracket = re.compile(r'^[ \t]*{')
	reFunc = re.compile(r'(?P<type>([^{}\s]+[ \t]+)+)(?P<name>\S+?)\((?P<args>[^{}]*)\)[ \t]*(const)?[ \t]*(;|{(.*)})')
	reVar = re.compile(r'^[ \t]*(?P<type>([^={}\(\)]+?))[ \t]+?(?P<names>([^={}\(\)\s]+?(,[ \t]+[^={}\(\)\s]+?)*));')
	reTypes = re.compile(r'(?P<all>int[ \t]*/\*[ \t]*(?P<name>[a-zA-Z]*Types)[ \t]*\*/)')
	reTypesSimple = re.compile(r'(?P<name>[a-zA-Z]*Types)')
	iLevel = 0
	bInClass = False
	bNewClass = False
	bBracketNext = False
	bSkipLine = False
	strClassName = ''

	# search file contents for data type info
	for strLine in linesList:
		if bInClass:
			# detect function
			mFunc = reFunc.search(strLine)
			if mFunc:
				definitionList = [mFunc.group('type'), strClassName, mFunc.group('name'), mFunc.group('args')]
				# run through API data from Python definitions
				for apiItemList in apiDict.values():
					# if they match, store the definition (if ClassCpp == ClassCpp and FunctionCpp == FunctionCpp)
					if strClassName == apiItemList[1] and mFunc.group('name') == apiItemList[2]:
						for i in range(4):
							if i == 0 or i == 3:
								mTypes = reTypesSimple.search(definitionList[i])
								if mTypes:
									parts = definitionList[i].split(',')
									for iIndex in range(len(parts)):
										mTypes = reTypes.search(parts[iIndex])
										if mTypes and not mTypes.group('name') in ['ErasTypes', 'ReligonTypes']:	#  typos are stupid, throw rocks at them
											parts[iIndex] = parts[iIndex].replace(mTypes.group('all'), mTypes.group('name') + ' ')
											typeDict[mTypes.group('name') + '.'] = mTypes.group('name') + '.'
										else:
											mTypes = reTypesSimple.search(parts[iIndex])
											if mTypes and not mTypes.group('name') in ['listPlotTypes', 'ErasTypes', 'ReligonTypes']:
												typeDict[mTypes.group('name') + '.'] = mTypes.group('name') + '.'
									definitionList[i] = ','.join(parts)
							# sometimes the code includes comments, remove those
							iBeginComment = definitionList[i].find('/*')
							while iBeginComment != -1:
								iEndComment = definitionList[i].find('*/')
								definitionList[i] = definitionList[i][:iBeginComment] + definitionList[i][iEndComment+2:]
								iBeginComment = definitionList[i].find('/*')
						# sometimes type is pointer with a space seperating the * from the type, remove *
						definitionList[0] = definitionList[0].strip()
						if definitionList[0][-2:] == ' *' or definitionList[0][-2:] == '\t*':
							definitionList[0] = definitionList[0][:-2]
						# store in format: classPython.functionPython(argumentsCpp):=typeCpp; [strDoc]
						if apiItemList[3] == '':
							apiList.append(apiItemList[0] + '(' + definitionList[3] + '):=' + definitionList[0].rsplit(' ', 1)[-1] + ';')
						else:
							apiList.append(apiItemList[0] + '(' + definitionList[3] + '):=' + definitionList[0].rsplit(' ', 1)[-1] + '; ' + apiItemList[3])
				# sometimes function is called as variable
#				for atrItemList in atrDict.values():
#					if strClassName == atrItemList[2] and mFunc.group('name') == atrItemList[3]:
#						apiList.append(atrItemList[0] + '..ATTR::' + atrItemList[1] + ':=' + mFunc.group('type') + ';' + atrItemList[4])
			else:
				# detect variable
				mVar = reVar.search(strLine)
				if mVar:
					# run through API data from Python definitions
					for atrItemList in atrDict.values():
						for name in [name.strip() for name in mVar.group('names').split(',')]:
							# if they match (ClassCpp == ClassCpp and AttribCpp == AttribCpp)
							if strClassName == atrItemList[2] and name == atrItemList[3]:
								apiList.append(atrItemList[0] + '..ATTR::' + atrItemList[1] + ':=' + mVar.group('type') + ';' + atrItemList[4])
		# detect constructor
		if strClassName + '(' in strLine:
			iColon = strLine.find(':')
			iBrace = strLine.find('{')
			if not iColon == -1 and not iBrace == -1:
				# get the part between ':' the '{' and split it by ',' and then by '('; take the left-most part
				strNamesList = [strName.split('(')[0].strip() for strName in strLine[iColon+1:iBrace].strip().split(',')]
				# run through API data from Python definitions
				for strConst in conList:
					if strConst[1] == strClassName:
						# construct the arguments (type1 name1, type2 name2, ...)
						strArgs = ''
						strTypeList = [strType.strip() for strType in strConst[2].split(',')]
						for i in range(len(strTypeList)):
							if not strArgs == '':
								strArgs += ', ' + strTypeList[i] + ' ' + strNamesList[i]
							else:
								strArgs += strTypeList[i] + ' ' + strNamesList[i]
						# store in format: (PythonClass...CONST::(type1 var1, type2 var2, ...)
						apiList.append(strConst[0] + '...CONST::(' + strArgs + ');')
		# enter/leave class
		if not bInClass and bBracketNext:
			# need bracket to open class
			mBracket = reBracket.search(strLine)
			if mBracket:
				# now in a new class
				bNewClass = True
			if not bSkipLine:
				# wrong kind of bracket
				bBracketNext = False
			else:
				# unless it's a class with multiple parents, wrong kind of bracket
				if not ',' in strLine:
					bSkipLine = False
		if not bInClass and not bNewClass:
			# check if a new class or struct starts
			mClass = reClass.search(strLine)
			mStruct = reStruct.search(strLine) or reStructAlt.search(strLine)
			if mClass or mStruct:
				if '{' in strLine:
					# now in new class
					bNewClass = True
				else:
					# find opening bracket first
					bBracketNext = True
				# extract (potential) class name
				if mClass:
					strClassName = mClass.group('name')
				else:
					strClassName = mStruct.group('name')
				if bBracketNext:
					iColon = strClassName.find(':')
					if not strClassName[iColon+1:].strip():
						# parent on next line, don't expect bracket there
						bSkipLine = True
					if not iColon == -1:
						# remove the parent list from the class name
						strClassName = strClassName[:iColon].strip()
					else:
						strClassName = strClassName.strip()
					# eliminate everything but the name itself
					iName = strClassName.rfind(' ')
					if not iName == -1:
						strClassName = strClassName[iName+1:]
		if bNewClass:
			# now in a new class
			bNewClass = False
			bInClass = True
			iLevel = 0
		if bInClass:
			# be wary of structs, private classes, whatnot
			if '{' in strLine:
				iLevel += 1;
			if '}' in strLine:
				iLevel -= 1;
				if iLevel == 0:
					# leaving class
					bInClass = False

def processEnumFiles():
	"""Process CyEnumsInterface.cpp, CvEnums.h and XML files for XML type info."""
	# first file
	# read the Header file
	try:
		fFile = open(strSdkDirName + '/CyEnumsInterface.cpp', 'rt')
	except IOError:
		print sys.exc_info()[0]
		return
	linesList = fFile.readlines()
	fFile.close()

	# set up regular expressions to extract function info
	reEnum = re.compile(r'^[ \t]*python::enum_<(?P<name>[^;/]*)>')

	for strLine in linesList:
		# detect method definition
		mEnum = reEnum.search(strLine)
		if mEnum:
			typeDict[mEnum.group('name') + '.'] = mEnum.group('name') + '.'

	# process XML files
	reType = re.compile(r'<Type>[ \t]*(?P<name>.*)[ \t]*</Type>')
	reType2 = re.compile(r'<(?P<type>.*)Type>[ \t]*(?P<name>.*)[ \t]*</(.*)Type>')
	reInfoIn = re.compile(r'<(?P<name>[a-zA-Z]*)Infos>')
	reInfoOut = re.compile(r'</(?P<name>[a-zA-Z]*)Infos>')
	strCurrentInfo = ''

	# cycle through all known types
	for strType in typeDict.keys():
		iDot = strType.find('.')
		strType = strType[:iDot]
		iCount = 0
		bIn = False

		# search for types from XML files
		if strType in importTypeDic.keys():
			strFile = importTypeDic[strType]
			try:
				fFile = open(strModDirName + '/Assets/XML/' + strFile, 'rt')
			except IOError:
				try:
					fFile = open('Assets/XML/' + strFile, 'rt')
				except IOError:
					try:
						fFile = open('../Warlords/Assets/XML/' + strFile, 'rt')	# added for Warlords
					except IOError:
						try:
							fFile = open('../Assets/XML/' + strFile, 'rt')	# added for Beyond the Sword
						except IOError:
							print sys.exc_info()[0]
							print "Cannot find file %s" % strFile
							continue
			linesList = fFile.readlines()
			fFile.close()

			# search file contents for type info
			for strLine in linesList:
				# special case
				if strFile == 'GlobalTypes.xml':
					mType = reType2.search(strLine)
					if mType:
						if strType == mType.group('type') + 'Types':
							strCount = str(iCount)
							if iCount < 10:
								strCount = '00' + str(iCount)
							elif iCount < 100:
								strCount = '0' + str(iCount)
							typeDict[strType + '.' + mType.group('name')] = strType + '.' + strCount + '=:' + mType.group('name')
							iCount += 1
				# special case
				elif strFile == 'BasicInfos/CIV4BasicInfos.xml':
					mInfoIn = reInfoIn.search(strLine)
					if mInfoIn:
						strCurrentInfo = mInfoIn.group('name')
						iCount = 0
					mInfoOut = reInfoOut.search(strLine)
					if mInfoOut:
						strCurrentInfo = ''
					mType = reType.search(strLine)
					if mType:
						if strType == strCurrentInfo + 'Types' and not (strType + '.' + mType.group('name')) in typeDict.keys():
							strCount = str(iCount)
							if iCount < 10:
								strCount = '00' + str(iCount)
							elif iCount < 100:
								strCount = '0' + str(iCount)
							typeDict[strType + '.' + mType.group('name')] = strType + '.' + strCount + '=:' + mType.group('name')
							iCount += 1
				# special case
				elif strFile == 'Units/CIV4AnimationInfos.xml':
					if strType == 'EntityEventTypes':
						# enter
						if not strLine.find('<EntityEventInfos>') == -1:
							bIn = True
						if not strLine.find('</EntityEventInfos>') == -1:
							bIn = False
					elif strType == 'AnimationCategoryTypes':
						# enter
						if not strLine.find('<AnimationCategories>') == -1:
							bIn = True
						if not strLine.find('</AnimationCategories>') == -1:
							bIn = False
					if bIn:
						mType = reType.search(strLine)
						if mType:
							strCount = str(iCount)
							if iCount < 10:
								strCount = '00' + str(iCount)
							elif iCount < 100:
								strCount = '0' + str(iCount)
							typeDict[strType + '.' + mType.group('name')] = strType + '.' + strCount + '=:' + mType.group('name')
							iCount += 1
				else:
					mType = reType.search(strLine)
					if mType:
						strCount = str(iCount)
						if iCount < 10:
							strCount = '00' + str(iCount)
						elif iCount < 100:
							strCount = '0' + str(iCount)
						typeDict[strType + '.' + mType.group('name')] = strType + '.' + strCount + '=:' + mType.group('name')
						iCount += 1

	# second enum file
	try:
		fFile = open(strSdkDirName + '/CvEnums.h', 'rt')
	except IOError:
		print sys.exc_info()[0]
		return
	linesList = fFile.readlines()
	fFile.close()

	# set up regular expressions to extract function info
	reEnum = re.compile(r'^[ \t]*enum[ \t]+DllExport[ \t]+(?P<name>[^;/]*)')
	reBracket = re.compile(r'^[ \t]*{')
	bInEnum = False
	bNewEnum = False
	bBracketNext = False
	strEnumName = ''
	iEnumCount = 0

	# search file contents for type info
	for strLine in linesList:
		if bInEnum and strEnumName in typeDict.keys():
			iComment = strLine.find('//')
			iLineComment = strLine.find('/*')
			if not iComment == -1:
				strLine = strLine[:iComment]
			elif not iLineComment == -1:
				strLine = strLine[:iLineComment]
			strLine = strLine.strip()
			strLine = strLine.strip(',')
			if strLine and not strLine == '};' and not strLine[0] == '#':
				iIs = strLine.find('=')
				if iIs == -1:
					strEnumCount = str(iEnumCount)
					if iEnumCount < 10:
						strEnumCount = '00' + str(iEnumCount)
					elif iEnumCount < 100:
						strEnumCount = '0' + str(iEnumCount)
					typeDict[strEnumName + strLine] = strEnumName + strEnumCount + '=:' + strLine
					iEnumCount += 1
				else:
					try:
						iValue = int(strLine[iIs+1:].strip())
						strValue = str(iValue)
						if iValue >= 0 and iValue < 10:
							strValue = '00' + str(iValue)
						elif iValue >= 10 and iValue < 100:
							strValue = '0' + str(iValue)
						iEnumCount = iValue + 1
					except ValueError:
						strValue = strLine[iIs+1:].strip()
						if strValue == 'NUM_BASIC_ITEMS' or strValue == 'NUM_TRADEABLE_HEADINGS' or strValue == 'CAMERAMOVEMENTSPEED_FAST':
							strValue = str(iEnumCount-1)
							if iEnumCount-1 >= 0 and iEnumCount-1 < 10:
								strValue = '00' + str(iEnumCount-1)
							elif iEnumCount-1 >= 10 and iEnumCount-1 < 100:
								strValue = '0' + str(iEnumCount-1)
						if strValue[:2] == '0x':
							strValue = strValue[2:]
						if strValue == 'WBPOPUP_START':
							strValue = str(200)
					strName = strLine[:iIs].strip()
					typeDict[strEnumName + strName] = strEnumName + strValue + '=:' + strName
		# enter/leave enum
		if not bInEnum and bBracketNext:
			# need bracket to open enum
			mBracket = reBracket.search(strLine)
			if mBracket:
				# now in a new enum
				bNewEnum = True
			bBracketNext = False
		if not bInEnum and not bNewEnum:
			# check if a new enum starts
			mEnum = reEnum.search(strLine)
			if mEnum:
				if '{' in strLine:
					# now in new enum
					bNewEnum = True
				else:
					# find opening bracket first
					bBracketNext = True
				strEnumName = mEnum.group('name')
				strEnumName = strEnumName.strip() + '.'
		if bNewEnum:
			# now in a new enum
			bNewEnum = False
			bInEnum = True
			iEnumCount = 0
		if bInEnum and '};' in strLine:
			# leaving enum
			bInEnum = False

def markUpArgs(strArgs):
	"""Mark up each of the arguments for HTML"""
	strArgsNew = ''
	strArgsNew2 = ''
	# only do this if there actually are arguments
	if strArgs and not strArgs == 'void':
		# split the args by ',', remove the default values after '=', split type and name, markup type
		markedUpArgsList = [(markUp(arg[0]), arg[1]) for arg in [arg.rsplit(' ', 1) for arg in [arg.split('=')[0].strip() for arg in strArgs.strip().split(',')]]]
		# take name and type and convert them to HTML code; format from markedUpArgsList: ((type, type2 <different link format>, HTML class), name)
		finalArgsList = [('<span class=%s>%s</span> %s' %(arg[0][2], arg[0][0], arg[1]), '<span class=%s>%s</span> %s' %(arg[0][2], arg[0][1], arg[1])) for arg in markedUpArgsList]
		# join arguments together again, if there's more than one
		if len(finalArgsList) == 1:
			strArgsNew = finalArgsList[0][0]
			strArgsNew2 = finalArgsList[0][1]
		else:
			strArgsNew = ', '.join([arg[0] for arg in finalArgsList])
			strArgsNew2 = ', '.join([arg[1] for arg in finalArgsList])
	return strArgsNew, strArgsNew2

def markUp(strType):
	"""Mark up the type strType."""
	# strip undesirable code
	strType = strType.strip()
	strType2 = ''
	if strType[-1] == '*' or strType[-1] == '&' or strType[-2:] == ' *':
		strType = strType[:-1].strip()
	if strType[:9] == 'unsigned ':
		strType = strType[9:]
	if strType[:6] == 'const ':
		strType = strType[6:]
	# standardise datatype
	if strType == 'uint' or strType == 'short':
		strType = 'int'
	elif strType == 'python::tuple':
		strType = 'tuple'
	elif strType == 'boost::python::list':
		strType = 'list'
	elif strType in ('std::wstring', 'std::string', 'CvString', 'TCHAR', 'wchar', 'char', 'LPCTSTR'):
		strType = 'string'
	elif strType == 'CvRandom':
		strType = 'CyRandom'
	elif strType == 'CvGlobeLayer':
		strType = 'CyGlobeLayer'

	# do mark up
	if strType in ('void', 'int', 'float', 'long', 'bool', 'string', 'tuple', 'list'):
		strSpanClass = strType
		strType = strType.upper()
		strType2 = strType
#	elif strType == 'CvString':
#		strSpanClass = 'class'
	elif strType[-5:] == 'Types' or strType[-6:] == 'Styles' or strType in ['InterfaceVisibility', 'TradeableItems', 'CameraMovementSpeeds', 'LeaderheadAction', 'EngineDirtyBits', 'GenericButtonSizes', 'PopupStates', 'InterfaceDirtyBits', 'EndTurnButtonStates']:
		strSpanClass = 'type'
		if not strType == 'InterfaceVisibility' and not strType == 'LeaderheadAction':
			strTypeName = strType[:-1]		# make singular
		else:
			strTypeName = strType
		strType2 = '<a class=type href="%sTypes/%s.html" target="typeFrame">%s</a>' %(strPrefix2, strType, strTypeName)
		strType = '<a class=type href="%sTypes/%s.html" target="typeFrame">%s</a>' %(strPrefix, strType, strTypeName)
	else:
		# if known class
		if strType in [strClass[0] for strClass in classList]:
			strSpanClass = 'class'
			if not strPath == '':
				strDir = 'Classes/'
			else:
				strDir = ''
			strType2 = '<a href="%s%s.html">%s</a>' %(strPrefix + strDir, strType, strType)
			strType = '<a href="#%s">%s</a>' %(strType, strType)
		# if unknown datatype
		else:
			strSpanClass = 'unknown'
			strType2 = strType
			unknownTypesDict[strType] = strType
	return strType, strType2, strSpanClass

def writeTree(tree, layout, bCount, iLevel, parentList, fileList, dic, iCurrentState):
	"""Convert a class structure into HTML form for the class frame."""
	# helper functions to concatenate lists
	classConcat = lambda l, m: l + '.' + m
	intConcat = lambda l, m: str(l) + str(m)
	# determine image type to use
	strSuffix = 'Wide'
	if iLevel == 0:
		strSuffix = 'Narrow'
	for (strClass, childrenList) in tree:
		# convert dic to list, to determine where to link to
		if not bCount:
			linkList = []
			for j in [(dic.keys().index(key), key) for key in dic.keys()]:
				if (iCurrentState & 2**j[0]):
					linkList.append(str(0))
				else:
					linkList.append(str(1))
		childrenList.sort()
		# important classes are bolded
		if strClass and strClass in boldClasses:
			parentList.append(strClass)
			strParents = reduce(classConcat, parentList)
			# in case this class has children
			if childrenList:
				# either inventarise class structure (put it in dic) or write code (use info from dic to determine which parts (not) to write)
				if bCount:
					dic[strParents] = 1
					# inventarise children
					dic = writeTree(childrenList, layout, bCount, iLevel + 1, parentList, fileList, dic, iCurrentState)
				# write this class and its children
				elif dic[strParents]:
					# determine file to link to by overwriting current class state
					linkList[strParents] = 0
					strLink = reduce(intConcat, linkList)
					fileList[0].write('%s<a name="%s"></a><a href="ClassFrame_%s.html%s"><img alt="-" src="%sminus%s.bmp"></img></a><span><a class=cf href="%sAllClasses.html#%s" target="mainFrame">%s</a></span><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
					fileList[1].write('%s<a name="%s"></a><a href="ClassFrame2_%s.html%s"><img alt="-" src="%sminus%s.bmp"></img></a><span><a class=cf href="%sClasses/%s.html" target="mainFrame">%s</a></span><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
#					fileList[0].write('%s<img src="minus%s.bmp"></img><span><a href="#%s">%s</a></span><br>\n' %(layout, strSuffix, strClass, strClass))
					writeTree(childrenList, layout + '<img alt="&nbsp;" src="%sempty%s.bmp"></img>' %(strPrefix2, strSuffix), bCount, iLevel +1, parentList, fileList, dic, iCurrentState)
				# write only this class, skip children
				else:
					# determine file to link to by overwriting current class state
					linkList[dic.keys().index(strParents)] = 1
					strLink = reduce(intConcat, linkList)
					fileList[0].write('%s<a name="%s"></a><a href="ClassFrame_%s.html%s"><img alt="+" src="%splus%s.bmp"></img></a><span><a class=cf href="%sAllClasses.html#%s" target="mainFrame">%s</a></span><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
					fileList[1].write('%s<a name="%s"></a><a href="ClassFrame2_%s.html%s"><img alt="+" src="%splus%s.bmp"></img></a><span><a class=cf href="%sClasses/%s.html" target="mainFrame">%s</a></span><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
			# write child-less class, if not inventarising
			elif not bCount:
				fileList[0].write('%s<img alt="&nbsp;" src="%sempty%s.bmp"></img><span><a class=cf href="%sAllClasses.html#%s" target="mainFrame">%s</a></span><br>\n' %(layout, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
				fileList[1].write('%s<img alt="&nbsp;" src="%sempty%s.bmp"></img><span><a class=cf href="%sClasses/%s.html" target="mainFrame">%s</a></span><br>\n' %(layout, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
#				fileList[0].write('%s<img src="empty%s.bmp"></img><span><a href="#%s">%s</a></span><br>\n' %(layout, strSuffix, strClass, strClass))
			parentList.pop()
		# if class is not an empty list (=root of tree)
		elif strClass:
			parentList.append(strClass)
			strParents = reduce(classConcat, parentList)
			if childrenList:
				# either inventarise class structure (put it in dic) or write code (use info from dic to determine which parts (not) to write)
				if bCount:
					dic[strParents] = 1
					dic = writeTree(childrenList, layout, bCount, iLevel + 1, parentList, fileList, dic, iCurrentState)
				# write this class and its children
				elif dic[strParents]:
					# determine file to link to by overwriting current class state
					linkList[dic.keys().index(strParents)] = 0
					strLink = reduce(intConcat, linkList)
					fileList[0].write('%s<a name="%s"></a><a href="ClassFrame_%s.html%s"><img alt="-" src="%sminus%s.bmp"></a></img><a class=cf href="%sAllClasses.html#%s" target="mainFrame">%s</a><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
					fileList[1].write('%s<a name="%s"></a><a href="ClassFrame2_%s.html%s"><img alt="-" src="%sminus%s.bmp"></a></img><a class=cf href="%sClasses/%s.html" target="mainFrame">%s</a><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
#					fileList[0].write('%s<img src="minus%s.bmp"></img><span><a href="#%s">%s</a></span><br>\n' %(layout, strSuffix, strClass, strClass))
					writeTree(childrenList, layout + '<img alt="&nbsp;" src="%sempty%s.bmp"></img>' %(strPrefix2, strSuffix), bCount, iLevel + 1, parentList, fileList, dic, iCurrentState)
				# write only this class, skip children
				else:
					# determine file to link to by overwriting current class state
					linkList[dic.keys().index(strParents)] = 1
					strLink = reduce(intConcat, linkList)
					fileList[0].write('%s<a name="%s"></a><a href="ClassFrame_%s.html%s"><img alt="+" src="%splus%s.bmp"></a></img><a class=cf href="%sAllClasses.html#%s" target="mainFrame">%s</a><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
					fileList[1].write('%s<a name="%s"></a><a href="ClassFrame2_%s.html%s"><img alt="+" src="%splus%s.bmp"></a></img><a class=cf href="%sClasses/%s.html" target="mainFrame">%s</a><br>\n' %(layout, strParents, strLink, '#' + strParents, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
			# write child-less class, if not inventarising
			elif not bCount:
				fileList[0].write('%s<img alt="&nbsp;" src="%sempty%s.bmp"></img><a class=cf href="%sAllClasses.html#%s" target="mainFrame">%s</a><br>\n' %(layout, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
				fileList[1].write('%s<img alt="&nbsp;" src="%sempty%s.bmp"></img><a class=cf href="%sClasses/%s.html" target="mainFrame">%s</a><br>\n' %(layout, strPrefix2, strSuffix, strPrefix2, strClass, strClass))
#				fileList[0].write('%s<img src="empty%s.bmp"></img><span><a href="#%s">%s</a></span><br>\n' %(layout, strSuffix, strClass, strClass))
			parentList.pop()
		else:
			# if root has children, go to them
			if childrenList:
				writeTree(childrenList, layout, bCount, iLevel + 1, parentList, fileList, dic, iCurrentState)
	# return inventory
	return dic

def findParentList(strClassToFind, parentList, iLevel):
	"""Returns the list of parents of a class and the degree to which they are removed from the class."""
	for strClass in classDict.values():
		if strClass[0] == strClassToFind:
			parentList.append((strClass[0], iLevel))
			for cls in strClass[1]:
				findParentList(cls, parentList, iLevel+1)
	return parentList

def printParentTree(strClass, strParentList):
	"""Print the tree structure of the parents of a class."""
	bPrint = False
	prev = ()
	strParents1 = '<br>\n<span class=italic>Resolution Order:</span><br>\n<span class=tree>'
	strParents2 = '<br>\n<span class=italic>nResolution Order:</span><br>\n<span class=tree>'
	for ((strParent, iLevel), iIndex) in [(strParent, strParentList.index(strParent)) for strParent in strParentList]:
		if not strClass == strParent:
			bPrint = True
			layout = ''
			layout2 = ''
			if not strPath == '':
				strDir = 'Classes/'
			else:
				strDir = ''
			for iCurrentLevel in range(iLevel):
				nextIndex = iIndex + 1
				if not nextIndex == len(strParentList):
					if strParentList[iIndex+1][1] <= iCurrentLevel:
						layout += '<img alt="&nbsp;" src="inherit2.bmp"></img>'
						layout2 += '<img alt="&nbsp;" src="../inherit2.bmp"></img>'
					else:
						layout += '<img alt="&nbsp;" src="inherit6.bmp"></img>'
						layout2 += '<img alt="&nbsp;" src="../inherit6.bmp"></img>'
				else:
					layout += '<img alt="&nbsp;" src="inherit6.bmp"></img>'
					layout2 = '<img alt="&nbsp;" src="../inherit6.bmp"></img>'
			if strParentList[iIndex-1][1] < iLevel:
				strParents1 += layout + '<img alt="&nbsp;" src="inherit3.bmp"></img><a href="#' + strParent + '">' + strParent + '</a><br>\n'
				strParents2 += layout2 + '<img alt="&nbsp;" src="../inherit3.bmp"></img><a href="' + strPrefix + strDir + strParent + '.html">' + strParent + '</a><br>\n'
			else:
				strParents1 += layout + '<img alt="&nbsp;" src="inherit5.bmp"></img><a href="#' + strParent + '">' + strParent + '</a><br>\n'
				strParents2 += layout2 + '<img alt="&nbsp;" src="../inherit5.bmp"></img><a href="' + strPrefix + strDir + strParent + '.html">' + strParent + '</a><br>\n'
		else:
			strParents1 += strParent + '<br>\n'
			strParents2 += strParent + '<br>\n'
	strParents1 += '</span>'
	strParents2 += '</span>'
	if bPrint:
		htmlMainFile.write(strParents1)
		htmlAllClasses.write(strParents1)
		return strParents2

def findApiItems(strItemToFind):
	"""Find all items from the API of a certain class."""
	resultList = []
	for strApiItem in apiList:
		iDot = strApiItem.find('.')
		strClass = strApiItem[:iDot]
		if strClass == strItemToFind:
			resultList.append(strApiItem)
	return resultList

def hasClassMethods(strClass):
	"""Returns if a class has methods."""
	reMethod = re.compile(r'(.*)\.(.*)\((.*)\):=(.*)')

	for strApiItem in apiList:
		iDot = strApiItem.find('.')
		strClass2 = strApiItem[:iDot]
		if strClass2 == strClass:
			mMethod = reMethod.search(strApiItem)
			if mMethod:
				return True
	return False

def printApiItem(strApiItem, strParent):
	"""Print an API item (i.e. method, constructor, attribute)."""
	global bFirstAttrib, bFirstMethod
	# format: classPython.functionPython(argumentsCpp):=typeCpp; [strDoc]
	# split the line in elements
	iDot = strApiItem.find('.')
	iOP = strApiItem.find('(')
	iCP = strApiItem.find(')')
	iIs = strApiItem.find(':=')
	iSC = strApiItem.find(';')
	strClass = strApiItem[:iDot]
	strType = strApiItem[iIs+2:iSC]
	strArgs = strApiItem[iOP+1:iCP]

	if not strApiItem[iDot:] == '.' and not strApiItem[iDot:] == '...nonSDK':
		# print contructor
		if strApiItem[iDot:iDot+10] == '...CONST::':
			htmlMainFile.write('<br>\n<span class=italic>Constructor:</span><br>\n')
			htmlAllClasses.write('<br>\n<span class=italic>Constructor:</span><br>\n')
			htmlCurrentFile.write('<br>\n<span class=italic>Constructor:</span><br>\n')
			# mark up arguments
			strArgs, strArgs2 = markUpArgs(strArgs)
			htmlMainFile.write('<a name="%s.%s"></a><span>%s(%s)</span><br>\n' %(strParent, strClass, strClass, strArgs))
			htmlAllClasses.write('<a name="%s.%s"></a><span>%s(%s)</span><br>\n' %(strParent, strClass, strClass, strArgs))
			htmlCurrentFile.write('<a name="%s.%s"></a><span>%s(%s)</span><br>\n' %(strParent, strClass, strClass, strArgs2))
		# print attribute
		elif strApiItem[iDot:iDot+8] == '..ATTR::':
			# mark up type
			strType, strType2, strSpanClass = markUp(strType)
			if bFirstAttrib:
				htmlMainFile.write('<br>\n<span class=italic>Attributes:</span><br>\n')
				htmlAllClasses.write('<br>\n<span class=italic>Attributes:</span><br>\n')
				htmlCurrentFile.write('<br>\n<span class=italic>Attributes:</span><br>\n')
				bFirstAttrib = False
			if strApiItem[iSC:] == ';':
				htmlMainFile.write('<a name="%s.%s"></a><span><span class=%s>%s</span> %s</span><br>\n' %(strParent, strApiItem[iDot+8:iIs], strSpanClass, strType, strApiItem[iDot+8:iIs]))
				htmlAllClasses.write('<a name="%s.%s"></a><span><span class=%s>%s</span> %s</span><br>\n' %(strParent, strApiItem[iDot+8:iIs], strSpanClass, strType, strApiItem[iDot+8:iIs]))
				htmlCurrentFile.write('<a name="%s.%s"></a><span><span class=%s>%s</span> %s</span><br>\n' %(strParent, strApiItem[iDot+8:iIs], strSpanClass, strType2, strApiItem[iDot+8:iIs]))
			else:
				htmlMainFile.write('<a name="%s.%s"></a><span><span class=%s>%s</span> %s:</span> %s<br>\n' %(strParent, strApiItem[iDot+8:iIs], strSpanClass, strType, strApiItem[iDot+8:iIs], strApiItem[iSC+2:]))
				htmlAllClasses.write('<a name="%s.%s"></a><span><span class=%s>%s</span> %s:</span> %s<br>\n' %(strParent, strApiItem[iDot+8:iIs], strSpanClass, strType, strApiItem[iDot+8:iIs], strApiItem[iSC+2:]))
				htmlCurrentFile.write('<a name="%s.%s"></a><span><span class=%s>%s</span> %s:</span> %s<br>\n' %(strParent, strApiItem[iDot+8:iIs], strSpanClass, strType2, strApiItem[iDot+8:iIs], strApiItem[iSC+2:]))
		# print method
		else:
			# mark up return type
			strType, strType2, strSpanClass = markUp(strType)
			# mark up arguments
			strArgs = strArgs.strip()
			strArgs, strArgs2 = markUpArgs(strArgs)
			# do print
			if bFirstMethod:
				htmlMainFile.write('<ol>\n')
				htmlAllClasses.write('<ol>\n')
				htmlCurrentFile.write('<ul>\n')
				bFirstMethod = False
			else:
				htmlMainFile.write('<br>\n')
				htmlAllClasses.write('<br>\n')
				htmlCurrentFile.write('<br>\n')
			strFunc = strApiItem[iDot+1:iOP]
			if bFunctionsIncludeClass:
				strFunc = strParent + "." + strFunc
			htmlMainFile.write('<a name="%s.%s"></a><li><span><span class=%s>%s</span> %s (%s)</span><br>\n' %(strParent, strFunc, strSpanClass, strType, strFunc, strArgs))
			htmlAllClasses.write('<a name="%s.%s"></a><li><span><span class=%s>%s</span> %s (%s)</span><br>\n' %(strParent, strFunc, strSpanClass, strType, strFunc, strArgs))
			htmlCurrentFile.write('<a name="%s.%s"></a><li><span><span class=%s>%s</span> %s (%s)</span><br>\n' %(strParent, strFunc, strSpanClass, strType2, strFunc, strArgs2))
			# docstring
			if strApiItem[iSC:] != ';':
				htmlMainFile.write(strApiItem[iSC+2:] + '<br>\n')
				htmlAllClasses.write(strApiItem[iSC+2:] + '<br>\n')
				htmlCurrentFile.write(strApiItem[iSC+2:] + '<br>\n')

### START ###

# step 1: find the Python definitions
print '\nProcessing search path...\n\n'
for root, dirs, files in os.walk(strSdkDirName):
	# first get the names of large class definitions that can be spread over multiple files
	for name in files:
		if name[-15:] == 'CvDLLPython.cpp':
			getMultiFileClasses(os.path.join(root, name))
	# then find the actual classes in the interface files
	for name in files:
		processInterfaceFile(os.path.join(root, name))

# step 2: find the C++ definitions
print '\n\nDone with Python defintions, processing C++ definitions...\n'
for root, dirs, files in os.walk(strSdkDirName):
	# find the c++ definitions
	for name in files:
		processHeaderFile(os.path.join(root, name))

# step 3: find the type info
print '\n\nProcessing XML files...',
processEnumFiles()
print 'complete.'

# step 4: comment and sort the API catalog alphabetically and the class list by hierarchy
print 'Sorting API catalog...',
apiList = commentApiList()
apiList.sort()

# helper function: returns a list of children of a class (if class has no children, returns empty list)
# example: A has children B, C and B has children X, Y -> children(A) = [B, C]; children(B) = [X, Y]; children(C) = []
children = lambda parent: [strClass for (strClass, parentList) in classDict.values() if (parent in parentList or parent == parentList)]

# helper function: for each class in a list returns a tuple (strClass, [children]), where children are determined recursively
# example: A has children B, C and B has children X, Y -> classTree([A]) = [(A, [(B, [(X, []), (Y, [])]), (C, [])])]
classTree = lambda lst: [(parent, classTree(children(parent))) for parent in lst]

# make class structure
treeList = classTree([[]])
# sort class list
classList = classDict.values()
classList.sort()
print 'complete.'


### creating the HTML code ###

# step 5: making dirs and opening files
print 'Creating HTML documents...',
if not os.access(strDirName, os.F_OK):
	try:
		os.mkdir(strDirName)
		if bCopyImages:
			shutil.copy('z_API_files/emptyWide.bmp', strDirName)
			shutil.copy('z_API_files/emptyNarrow.bmp', strDirName)
			shutil.copy('z_API_files/minusWide.bmp', strDirName)
			shutil.copy('z_API_files/minusNarrow.bmp', strDirName)
			shutil.copy('z_API_files/plusWide.bmp', strDirName)
			shutil.copy('z_API_files/plusNarrow.bmp', strDirName)
			shutil.copy('z_API_files/inherit2.bmp', strDirName)
			shutil.copy('z_API_files/inherit3.bmp', strDirName)
			shutil.copy('z_API_files/inherit5.bmp', strDirName)
			shutil.copy('z_API_files/inherit6.bmp', strDirName)
			shutil.copy('z_API_files/acs_logo.gif', strDirName)
	except OSError:
		print 'error copying images, continuing without...',
#		print sys.exc_info()[0]
#		sys.exit(1)
if not os.access(strDirName + '/Classes', os.F_OK):
	try:
		os.mkdir(strDirName + '/Classes')
	except OSError:
		print sys.exc_info()[0]
		sys.exit(2)
if not os.access(strDirName + '/ClassFrames', os.F_OK):
	try:
		os.mkdir(strDirName + '/ClassFrames')
	except OSError:
		print sys.exc_info()[0]
		sys.exit(2)
if not os.access(strDirName + '/Types', os.F_OK):
	try:
		os.mkdir(strDirName + '/Types')
	except OSError:
		print sys.exc_info()[0]
		sys.exit(2)
try:
	htmlMainFile = open(strDirName + '/CvClassReference.html', 'wt')
	htmlIndex = open(strDirName + '/index.html', 'wt')
	htmlIndex2 = open(strDirName + '/index2.html', 'wt')
	htmlIndex3 = open(strDirName + '/index3.html', 'wt')
	htmlIndex4 = open(strDirName + '/index4.html', 'wt')
	htmlLegend = open(strDirName + '/legend.html', 'wt')
	htmlAllClasses = open(strDirName + '/AllClasses.html', 'wt')
	htmlList = open(strDirName + '/list.html', 'wt')
	htmlList2 = open(strDirName + '/list2.html', 'wt')
except IOError:
	print sys.exc_info()[0]
	sys.exit(3)
# write headers
htmlMainFile.write(strHeaderMainFile)
htmlMainFile.write('<span class=h2>Sid Meier\'s Civilization IV Python Class Reference</span><br>\n<br>\n<br>\n')
htmlAllClasses.write(strHeaderMainFile)
htmlList.write(strHeaderMainFile)
htmlList2.write(strHeaderMainFile)

# step 6: make TOC
dic = {}
# intentarise class structure
countDict = writeTree(treeList, '', True, -1, [], (), {}, 0)
strExp = '1'*len(countDict)
strCol = '0'*len(countDict)
# make every combo of printable class structure with different parts (not) printed
for i in range(2**len(countDict)):
	strSuffix = ''
	# make unique combo
	# generate tuple (index, key); e.g. keys = [a, b, c] returns [(1, a), (2, b), (3, c)]
	for j in [(countDict.keys().index(key), key) for key in countDict.keys()]:
		if (i & 2**j[0]):
			dic[j[1]] = 0
			strSuffix += str(0)
		else:
			dic[j[1]] = 1
			strSuffix += str(1)
	# create classframe files
	try:
		htmlCFrame_1 = open(strDirName + '/ClassFrames/ClassFrame_%s.html' %strSuffix, 'wt')
		htmlCFrame_2 = open(strDirName + '/ClassFrames/ClassFrame2_%s.html' %strSuffix, 'wt')
	except IOError:
		print sys.exc_info()[0]
		sys.exit(3)
	# write headers
	htmlCFrame_1.write(strHeaderClassFrame)
	htmlCFrame_1.write(strAllClasses %(strPrefix2, strPrefix2))
	if not strPath == '':
		strDir = 'ClassFrames/'
	else:
		strDir = ''
	if strSuffix == strExp:
		htmlCFrame_1.write(strExpand %(strPrefix + strDir, '', strCol))
	elif strSuffix == strCol:
		htmlCFrame_1.write(strCollapse %(strPrefix + strDir, '', strExp))
	else:
		htmlCFrame_1.write(strExpandCollapse %(strPrefix + strDir, '', strExp, strPrefix + strDir, '', strCol))
	htmlCFrame_2.write(strHeaderClassFrame)
	htmlCFrame_2.write(strSepClasses %(strPrefix2, strPrefix2))
	if strSuffix == strExp:
		htmlCFrame_2.write(strExpand %(strPrefix + strDir, str(2), strCol))
	elif strSuffix == strCol:
		htmlCFrame_2.write(strCollapse %(strPrefix + strDir, str(2), strExp))
	else:
		htmlCFrame_2.write(strExpandCollapse %(strPrefix + strDir, str(2), strExp, strPrefix + strDir, str(2), strCol))
	# write unique class list
	writeTree(treeList, '', False, -1, [], (htmlCFrame_1, htmlCFrame_2), dic, i)
	# wrap up
	htmlCFrame_1.write(strFooterShort)
	htmlCFrame_1.close()
	htmlCFrame_2.write(strFooterShort)
	htmlCFrame_2.close()
# make TOC for main file (alphabetically)
for strClass in [strClass[0] for strClass in classList]:
	htmlMainFile.write('<span><a href="#%s">%s</a></span><br>\n' %(strClass, strClass))
htmlMainFile.write('<br>\n<br>\n<br>\n')
# write index.html, index2.html and legend.html (use last suffix from TOC to display collapsed class list by default)
htmlIndex.write(strIndex %(strPrefix + 'ClassFrames/ClassFrame_%s.html' %strSuffix, strPrefix, strDefault, 'AllClasses.html'))
htmlIndex2.write(strIndex %(strPrefix + 'ClassFrames/ClassFrame2_%s.html' %strSuffix, strPrefix, strDefault, 'Classes/' + apiList[0][:apiList[0].find('.')] + '.html'))
htmlIndex3.write(strIndex %(strPrefix + 'list.html', strPrefix, strDefault, 'AllClasses.html'))
htmlIndex4.write(strIndex %(strPrefix + 'list2.html', strPrefix, strDefault, 'Classes/' + apiList[0][:apiList[0].find('.')] + '.html'))

htmlLegend.write(strLegend %(strPrefix, strPrefix))
htmlIndex.close()
htmlIndex2.close()
htmlIndex3.close()
htmlIndex4.close()
htmlLegend.close()

strCurrentClass = ''
bFirstMethod = False
bFirstAttrib = False

# step 7: write functions, attributes, constructors
for strApiItem in apiList:
	iDot = strApiItem.find('.')
	strClass = strApiItem[:iDot]

	# if a new class starts, print new header
	if not strClass == strCurrentClass:
		# if first class
		if strCurrentClass == '':
			# write data
			if not strApiItem == strClass + '...nonSDK':
				htmlMainFile.write(strFirstClass %(strClass, strClass, ''))
				htmlAllClasses.write(strFirstClass %(strClass, strClass, ''))
			else:
				htmlMainFile.write(strFirstClass %(strClass, strClass, ' - not in SDK'))
				htmlAllClasses.write(strFirstClass %(strClass, strClass, ' - not in SDK'))
		else:
			# file handling, cloe old file
			htmlCurrentFile.write(strFooter)
			htmlCurrentFile.close()
			# write data
			if not strApiItem == strClass + '...nonSDK':
				htmlMainFile.write(strNewClass %(strClass, strClass, ''))
				htmlAllClasses.write(strNewClass %(strClass, strClass, ''))
			else:
				htmlMainFile.write(strNewClass %(strClass, strClass, ' - not in SDK'))
				htmlAllClasses.write(strNewClass %(strClass, strClass, ' - not in SDK'))
		strParentList = findParentList(strClass, [], -1)
		strParents2 = printParentTree(strClass, strParentList)
		# file handling, open new file
		try:
			htmlCurrentFile = open(strDirName + '/Classes/' + strClass + '.html', 'wt')
		except IOError:
			print sys.exc_info()[0]
			sys.exit(4)
		if not strApiItem == strClass + '...nonSDK':
			htmlCurrentFile.write(strSepClass %(strClass, strClass, ''))
		else:
			htmlCurrentFile.write(strSepClass %(strClass, strClass, ' - not in SDK'))
		if strParents2:
			htmlCurrentFile.write(strParents2)
		if not strPath == '':
			strDir = 'Classes/'
		else:
			strDir = ''
		# print inherited methods
		inheritedMethods = [(findApiItems(parentClass), parentClass) for (parentClass, iLevel) in strParentList if not parentClass == strClass]
		bInherited = False
		bVeryFirstMethod = True
		for (inheritedClass, parentClass) in inheritedMethods:
			if len(inheritedClass) > 1:
				bInherited = True
				bFirstAttrib = True
				if bVeryFirstMethod:
					htmlMainFile.write('<br>\n')
					htmlAllClasses.write('<br>\n')
					htmlCurrentFile.write('<br>\n')
					bVeryFirstMethod = False
				htmlMainFile.write('<span class=italic>Methods inherited from </span><a href="#%s">%s</a><span class=italic>:</span><br>\n' %(parentClass, parentClass))
				htmlAllClasses.write('<span class=italic>Methods inherited from  </span><a href="#%s">%s</a><span class=italic>:</span><br>\n' %(parentClass, parentClass))
				htmlCurrentFile.write('<span class=italic>Methods inherited from  </span><a href="%s.html">%s<span class=italic>:</a></span><br>\n' %(strPrefix + strDir + parentClass, parentClass))
				bFirstMethod = True
				[printApiItem(method, strClass) for method in inheritedClass]
				htmlMainFile.write('</ol>\n')
				htmlAllClasses.write('</ol>\n')
				htmlCurrentFile.write('</ul>\n')
		# wrap up class header
		strCurrentClass = strClass
		bFirstMethod = True
		bFirstAttrib = True
	# print item
	if bInherited and hasClassMethods(strClass):
		htmlMainFile.write('<span class=italic>Methods defined here:</span><br>\n')
		htmlAllClasses.write('<span class=italic>Methods defined here:</span><br>\n')
		htmlCurrentFile.write('<span class=italic>Methods defined here:</span><br>\n')
		bInherited = False
	#print "Printing %s :: %s\n" %(strClass, strApiItem)
	printApiItem(strApiItem, strClass)

# step 8: create and sort index
for strApiItem in apiList:
	iDot = strApiItem.find('.')
	iOP = strApiItem.find('(')
	strClass = strApiItem[:iDot]

	# switch class and method/attribute so everything can be sorted on method/attribute
	if not strApiItem[iDot:] == '.' and not strApiItem[iDot:] == '...nonSDK':
		if strApiItem[iDot:iDot+10] == '...CONST::':
			indexList.append(strApiItem)
		elif strApiItem[iDot:iDot+8] == '..ATTR::':
			iIs = strApiItem.find(':=')
			strAttrib = strApiItem[iDot+8:iIs]
			strRest = strApiItem[iIs:]
			indexList.append(strAttrib + '.' + strClass + '::ATTR..' + strRest)
		else:
			strMethod = strApiItem[iDot+1:iOP]
			strRest = strApiItem[iOP+1:]
			indexList.append(strMethod + '.' + strClass + '(' + strRest)

# index inherited methods
for strClass in classDict.keys():
	strParentList = findParentList(strClass, [], -1)
	inheritedMethods = [(findApiItems(parentClass), parentClass) for (parentClass, iLevel) in strParentList if not parentClass == strClass]
	for (inheritedClass, parentClass) in inheritedMethods:
		if len(inheritedClass) > 1:
			for method in inheritedClass:
				# switch class and method
				iDot = method.find('.')
				iOP = method.find('(')
				if not method[iDot:] == '.' and not method[iDot:] == '...nonSDK':
					strMethod = method[iDot+1:iOP]
					strRest = method[iOP+1:]
					indexList.append(strMethod + '.' + strClass + '<<<(' + strRest)
# sort
cmpfun = lambda x, y: cmp(x.lower(), y.lower())
indexList.sort(cmpfun)

# step 9: write index (a la PrintApiItem() but with class and method reversed)
strSuffix = '0' * len(strSuffix)
htmlList.write(strHeaderList)
htmlList.write(strListAllClasses %(strPrefix, strSuffix, strPrefix))
htmlList2.write(strHeaderList)
htmlList2.write(strListSepClasses %(strPrefix, strSuffix, strPrefix))
strCurrLetter = ''
strManual = ''
for strIndexItem in indexList:
	iDot = strIndexItem.find('.')
	iOP = strIndexItem.find('(')
	iCP = strIndexItem.find(')')
	iIs = strIndexItem.find(':=')
	iSC = strIndexItem.find(';')
	iCol = strIndexItem.find('::ATTR..')
	iInh = strIndexItem.find('<<<')

	# print new letter
	if strIndexItem[0].lower() != strCurrLetter:
		strCurrLetter = strIndexItem[0].lower()
		htmlList.write('<br>\n<a name="%s"></a>%s - <a class=index href="#top">back to top</a><br>\n<br>\n' %(strIndexItem[0].upper(), strIndexItem[0].upper()))
		htmlList2.write('<br>\n<a name="%s"></a>%s - <a class=index href="#top">back to top</a><br>\n<br>\n' %(strIndexItem[0].upper(), strIndexItem[0].upper()))
	elif strIndexItem[:4].lower() == 'getd' and not strManual == 'd':
		strManual = 'd'
		htmlList.write('<a name="getD"></a>\n')
		htmlList2.write('<a name="getD"></a>\n')
		htmlList.write('<a class=index href="#top">back to top</a><br>\n')
		htmlList2.write('<a class=index href="#top">back to top</a><br>\n')
	elif strIndexItem[:4].lower() == 'geti' and not strManual == 'i':
		strManual = 'i'
		htmlList.write('<a name="getI"></a>\n')
		htmlList2.write('<a name="getI"></a>\n')
		htmlList.write('<a class=index href="#top">back to top</a><br>\n')
		htmlList2.write('<a class=index href="#top">back to top</a><br>\n')
	elif strIndexItem[:4].lower() == 'getp' and not strManual == 'p':
		strManual = 'p'
		htmlList.write('<a name="getP"></a>\n')
		htmlList2.write('<a name="getP"></a>\n')
		htmlList.write('<a class=index href="#top">back to top</a><br>\n')
		htmlList2.write('<a class=index href="#top">back to top</a><br>\n')
	elif strIndexItem[:4].lower() == 'gett' and not strManual == 't':
		strManual = 't'
		htmlList.write('<a name="getT"></a>\n')
		htmlList2.write('<a name="getT"></a>\n')
		htmlList.write('<a class=index href="#top">back to top</a><br>\n')
		htmlList2.write('<a class=index href="#top">back to top</a><br>\n')
	# print contructor
	if strIndexItem[iDot:iDot+10] == '...CONST::':
		htmlList.write('<a class=black href="%sAllClasses.html#%s.%s" target="mainFrame">%s</a> (const), <a href="%sAllClasses.html#%s" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[:iDot], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[:iDot], strIndexItem[:iDot]))
		htmlList2.write('<a class=black href="%sClasses/%s.html#%s.%s" target="mainFrame">%s</a> (const), <a href="%sClasses/%s.html" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[:iDot], strIndexItem[:iDot], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[:iDot], strIndexItem[:iDot]))
	# print attribute
	elif iCol != -1:
		htmlList.write('<a class=black href="%sAllClasses.html#%s.%s" target="mainFrame">%s</a> (attr), <a href="%sAllClasses.html#%s" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[iDot+1:iCol], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[iDot+1:iCol], strIndexItem[iDot+1:iCol]))
		htmlList2.write('<a class=black href="%sClasses/%s.html#%s.%s" target="mainFrame">%s</a> (attr), <a href="%sClasses/%s.html" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[iDot+1:iCol], strIndexItem[iDot+1:iCol], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[iDot+1:iCol], strIndexItem[iDot+1:iCol]))
	# print inherited method
	elif iInh != -1:
		htmlList.write('<a class=black href="%sAllClasses.html#%s.%s" target="mainFrame">%s</a> (inh), <a href="%sAllClasses.html#%s" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[iDot+1:iInh], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[iDot+1:iInh], strIndexItem[iDot+1:iInh]))
		htmlList2.write('<a class=black href="%sClasses/%s.html#%s.%s" target="mainFrame">%s</a> (inh), <a href="%sClasses/%s.html" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[iDot+1:iInh], strIndexItem[iDot+1:iInh], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[iDot+1:iInh], strIndexItem[iDot+1:iInh]))
	# print own method
	elif not strIndexItem[iDot:] == '.' and not strIndexItem[iDot:] == '...nonSDK':
		htmlList.write('<a class=black href="%sAllClasses.html#%s.%s" target="mainFrame">%s</a>, <a href="%sAllClasses.html#%s" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[iDot+1:iOP], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[iDot+1:iOP], strIndexItem[iDot+1:iOP]))
		htmlList2.write('<a class=black href="%sClasses/%s.html#%s.%s" target="mainFrame">%s</a>, <a href="%sClasses/%s.html" target="mainFrame">%s</a><br>\n' %(strPrefix, strIndexItem[iDot+1:iOP], strIndexItem[iDot+1:iOP], strIndexItem[:iDot], strIndexItem[:iDot], strPrefix, strIndexItem[iDot+1:iOP], strIndexItem[iDot+1:iOP]))

# wrap up
htmlMainFile.write(strFooter2)
htmlAllClasses.write(strFooter2)
htmlCurrentFile.write(strFooter)
htmlList.write(strFooterShort)
htmlList2.write(strFooterShort)
htmlMainFile.close()
htmlAllClasses.close()
htmlCurrentFile.close()
htmlList.close()
htmlList2.close()

# step 10: write type files
strCurrentEnum = ''
typeList = typeDict.values()
typeList.sort()
try:
	htmlTypeList = open(strDirName + '/Types/TypeList.html', 'wt')
except IOError:
	print sys.exc_info()[0]
	sys.exit(5)
htmlTypeList.write(strHeaderTypeFrame)
htmlTypeList.write('<a class=tf href="%slegend.html">Legend</a> - Type List - <a class=tf href="%supdates.html">Updates</a><br>\n<br>\n' %(strPrefix2, strPrefix2))
for strTypeItem in typeList:
	iDot = strTypeItem.find('.')
	iSi = strTypeItem.find('=:')
	strEnum = strTypeItem[:iDot]

	# if a new class starts, print new header
	if not strEnum == strCurrentEnum:
		# close old file
		if strCurrentEnum:	# not the first time
			htmlCurrentFile.write(strFooterType)
			htmlCurrentFile.close()
		# open new file
		try:
			htmlCurrentFile = open(strDirName + '/Types/' + strEnum + '.html', 'wt')
		except IOError:
			print sys.exc_info()[0]
			sys.exit(5)
		# print header
		htmlCurrentFile.write(strHeaderTypeFrame)
		htmlCurrentFile.write('<a class=tf href="%slegend.html">Legend</a> - <a class=tf href="TypeList.html">Type List</a> - <a class=tf href="%supdates.html">Updates</a><br>\n<br>\n' %(strPrefix2, strPrefix2))
		htmlCurrentFile.write('%s:<br>\n<br>\n' %strEnum)
		htmlTypeList.write('<a class=tf href="%s%s.html">%s</a><br>\n' %(strPrefix2 + 'Types/', strEnum, strEnum))
		strCurrentEnum = strEnum
	else:
		# print item
		if strTypeItem == 'PlayerTypes.-1=:NO_PLAYER':
			htmlCurrentFile.write('Differs per game. The index is the ID of a player in the game (e.g. in Desert War, 0 represents the British, 4 the Germans).<br>\n<br>\n')
		if strTypeItem == 'TeamTypes.-1=:NO_TEAM':
			htmlCurrentFile.write('Differs per game. The index is the ID of a team in the game (e.g. in Desert War, 0 represents the Allies, 1 the Axis).<br>\n<br>\n')
		try:
			iIndex = int(strTypeItem[iDot+1:iSi])
			strIndex = str(iIndex)
			if iIndex >= 0 and iIndex < 10:
				strIndex = '&nbsp;&nbsp;' + str(iIndex)
			elif (iIndex >= 10 and iIndex < 100) or iIndex < 0:
				strIndex = '&nbsp;' + str(iIndex)
			htmlCurrentFile.write('%s = %s<br>\n' %(strIndex, strTypeItem[iSi+2:]))
		except ValueError:
			htmlCurrentFile.write('= %s<br>\n' %strTypeItem)

htmlCurrentFile.write(strFooterType)
htmlCurrentFile.close()
htmlTypeList.write(strFooterType)
htmlTypeList.close()
print 'complete.'

# print type list
#typeList = typeDict.values()
#typeList.sort()
#print '\n\nEncountered the following types:'
#for strType in typeList:
#	if strType[:15] == 'TradeableItems.':
#		print '%s' %strType
#print

# step 11: create CSS file
print 'Creating Stylesheet document...',
try:
	cssFile = open(strDirName + '/style.css', 'wt')
except IOError:
	print sys.exc_info()[0]
	sys.exit(6)
cssFile.write(strStyleSheet)
cssFile.close()
print 'complete.'

# step 12: wrap-up
print '\nCreation of Sid Meier\'s Civilization IV Python Class Reference HTML document completed. %i classes and %i class members found.' %(len(classDict), len(apiList) - len(classDict))
if unknownTypesDict:
	print '\n\nEncountered the following unknown type(s):'
	unknownTypeList = unknownTypesDict.values()
	unknownTypeList.sort()
	for unknownType in unknownTypeList:
		print '%s' %unknownType
